iOSハッシュ(HASH)アルゴリズム

6673 ワード

よく使われる暗号化アルゴリズムの文章をまとめた.

1、常用暗号化アルゴリズム


1.1ハッシュ関数

- MD5
- SHA1
- SHA256/512

特長

-      
-         ,         
-           ,         
    MD5:          32   
    SHA1:          40   
    SHA256:      64   
    SHA512:      128   
-      

1.2対称暗号化アルゴリズム

- DES(      )
- 3DES
- AES(      ,          ,iOS         (   ))

1.3非対称暗号化アルゴリズム

- RSA

1.4 ECB&CBC

  • ECB電子コードブック(Electronic Codebook Book(ECB))
    1つのデータを複数のブロックに分割し、独立して暗号化します.
  • パスワードパケットリンクモード(Cipher Block Chaining(CBC))
    まず、明文をいくつかのセグメントに分割し、各セグメントを初期ブロックまたは前のセグメントの暗号セグメントと排他的または演算した後、鍵およびベクトルと暗号化します.この方法は暗号文の完全性を保証することができて、もし1つのデータが変化するならば、後のすべてのデータは破壊されます!

  • 2、MD5


    2.1用途

  • パスワード暗号化ユーザーログイン時のパスワード検証.2つの原則:1.ネットワーク上でユーザの明文プライバシーデータを伝送することは許されない.ユーザの明文プライバシーデータをローカルに保存することは許されない
  • .
  • 情報要約、情報「指紋」は、データ識別(ファイル改ざん防止)のための
  • である.
  • 検索、キーワード識別
  • 著作権表示
  • 2.2端末によるMD 5値の表示

  • 文字列MD 5値
  • echo -n         | openssl md5
     
    md5 -s      
    -nパラメータが必要で、-nはリターン記号を入力しないことを示し、正しい結果を得ることができます.
  • ファイルMD 5値
  • md5 file.dat(    )

    2.3 MD 5ハッシュ計算コード


    iOSは、システムMD 5が提供する方法を使用する前に、ヘッダファイル#import OCコードをインポートする必要がある.
    #pragma mark -     
    - (NSString *)md5String {
        const char *str = self.UTF8String;
        uint8_t buffer[CC_MD5_DIGEST_LENGTH];
        CC_MD5(str, (CC_LONG)strlen(str), buffer);
        return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH];
    }
    - (NSString *)stringFromBytes:(uint8_t *)bytes length:(int)length {
        NSMutableString *strM = [NSMutableString string];
        for (int i = 0; i < length; i++) {
            [strM appendFormat:@"%02x", bytes[i]];
        }
        return [strM copy];
    }

    Swiftコード:
    extension String {
        /// MD5  
        func getMd5() -> String {
            let str = self.cString(using: String.Encoding.utf8)
            let strLen = CUnsignedInt(self.lengthOfBytes(using: String.Encoding.utf8))
            let digestLen = Int(CC_MD5_DIGEST_LENGTH)
            let result = UnsafeMutablePointer.allocate(capacity: digestLen)
            CC_MD5(str!, strLen, result)
            let hash = NSMutableString()
            for i in 0.."%02x", result[i])
            }
            result.deallocate(capacity: digestLen)
            return String(hash)
        }
        /// MD5  
        var md5: String! {
            return self.getMd5()
        }
    }

    3、SHA1 / SHA256 / SHA512


    3.1端末SHA関数ハッシュ値の表示

  • 文字列HSA 1値
  • echo -n "string" | openssl sha -sha1
     
    echo -n "string" | openssl sha -sha256
     
    echo -n "string" | openssl sha -sha512
  • ファイルSHA 1値
  • openssl sha -sha1 file.dat(    )
     
    openssl sha -sha256 file.dat
     
    openssl sha -sha512 file.dat

    3.2 SHA関数ハッシュ計算コード


    SHA 1ハッシュコード,OC:
    - (NSString *)sha1String {
        const char *str = self.UTF8String;
        //     ,      SHA1、SHA256、SHA512
        // uint8_t buffer[CC_SHA256_DIGEST_LENGTH];
        // CC_SHA256(str, (CC_LONG)strlen(str), buffer);
        uint8_t buffer[CC_SHA1_DIGEST_LENGTH];
        CC_SHA1(str, (CC_LONG)strlen(str), buffer);
        return [self stringFromBytes:buffer length:CC_SHA1_DIGEST_LENGTH];
    }
    - (NSString *)stringFromBytes:(uint8_t *)bytes length:(int)length {
        NSMutableString *strM = [NSMutableString string];
        for (int i = 0; i < length; i++) {
            [strM appendFormat:@"%02x", bytes[i]];
        }
        return [strM copy];
    }

    4、ハッシュ関数のまとめ


    ハッシュ関数計算は、上記の計算方法やコードのほか、ファイルをハッシュ計算してデータ指紋を生成することもできます.あるいは秘密保持の要求が高い場合、塩処理、HMACハッシュ計算などを行います!
    パッケージコードコレクション