2016-09-01 25 views
-2

Javaは私がでdataを暗号化することが可能なMAC(Message Authentication Code) algorithm API提供:私はスウィフトに新しいですHMAC暗号化

byte[] data = getDataBytes(); 
Mac mac = Mac.getInstance("HMAC-SHA256"); 
mac.init(new SecretKeySpec(key, "HMAC-SHA256")); 
byte[] encryptedBytes = mac.doFinal(data); 

を、どのように私はスウィフト2と上記と同じものを実装することができますか?

+1

http://stackoverflow.com/questions/24099520/commonhmac-in-swift、http://stackoverflow.com/questions/26970807/implementing-hmac-and-をインポートsha1-encryption-in-swift、http://stackoverflow.com/questions/35620960/generating-hmac-sha256-from-byte-array-in-swift –

答えて

0
func hmacSha256(string:String, key:String) -> [UInt8] { 
    var mac = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0) 
    if let dataBytes = string.dataUsingEncoding(NSUTF8StringEncoding) { 
     if let keyBytes = key.dataUsingEncoding(NSUTF8StringEncoding) { 
      CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), 
        keyBytes.bytes, keyBytes.length, 
        dataBytes.bytes, dataBytes.length, 
        &mac); 
     } 
    } 

    return mac; 
} 
let hash = hmacSha256("InputString", key:"keyString") 
print("hash: \(hash)") 

ハッシュ:[41、226、70、65、222、197、202、78、138、62、40、93、225、228、181、178、108、158、238、 25、74、199、116、106、96、142、216、239、41、18、245、156]

は、IOSのためのプロジェクト

Security.frameworkを追加します。
一般的な暗号はimでなければなりませんブリッジされたヘッダーに
#import <CommonCrypto/CommonCrypto.h>
を追加します。 OSX用

はちょうど
#import <CommonCrypto/CommonCrypto.h>

+0

ありがとう、私が提供したJavaコードでは、関数の戻り値の型は 'byte'の配列です。なぜあなたのソリューションでは、戻り値の型が' UInt8'の配列ですか?私はJavaコードのような全く同じ機能が必要です。 –

+0

'UInt8'はバイトです。 「U」は「符号なし」、「整数」は「整数」、「8ビット」は「8」を表す。これは、バイトの標準Swiftタイプです。この関数は、バイト配列を返します。 – zaph

+0

私はiOSもOSXプロジェクトも開発していないので、純粋なSwiftプロジェクトを書いているので、私はCommonCryptoをインポートできませんので、この回答は私にとってはうまくいきません。 –