2013-07-26 203 views
3

我是新來加密,我想通過websockets從一個移動應用程序到一個網頁獲得一些對稱加密使用AES256。RNCryptor IOS + Javascript加密/解密AES 256

我使用RNCryptor默認設置

IOS代碼

NSString* message = @"testmessage"; 
    NSData* pubData = [message dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData *encryptedData = [RNEncryptor encryptData:pubData 
             withSettings:kRNCryptorAES256Settings 
              password:@"test" 
               error:&error]; 
    if(error) { 
     NSLog(@"Error encrypting %@", [error localizedDescription]); 
    } 

    NSString* encryptedString = [encryptedData base64Encoding]; 
    NSLog(@"Sending message %@", encryptedString); 
    [self.session publishData:[encryptedString dataUsingEncoding:NSUTF8StringEncoding] onTopic:@"test12345"]; 

這裏是輸出出去過的WebSockets AgEBnXPPvAkJb7YVapwCVNd5SQw4JwqU7BfLsEXNZyKy9SazfJT8w16Y/hYY7aKxuz3Kuy2tAXXX/cHCc3PMhvG + fzSfrslRVMKvD6L + oWvXLg ==

JAVASCRIPT加密數據代碼 - 我收到消息,我嘗試解析並顯示它

function onMessageArrived(message) { 

    var rawData = base64.decode(message.payloadString); 
    var encryptionSalt = rawData.substr(2,8); 
    var hmacSalt = rawData.substr(10,8); 
    var iv = rawData.substr(18, 16); 
    var ciphertext = rawData.substr(34, rawData.length-34-32); 
    var hmac = rawData.substr(rawData.length-32, 32); 
    var password = "test"; 

    var key = CryptoJS.PBKDF2(password, encryptionSalt, { keySize: 256/32, iterations: 10000}); 

    var plaintextArray = CryptoJS.AES.decrypt(
    { ciphertext: CryptoJS.enc.Utf8.parse(ciphertext) }, 
    CryptoJS.enc.Hex.parse(key), 
    { iv: CryptoJS.enc.Latin1.parse(iv) } 
); 

    showScreen('<span style="color: blue;">User: ' + CryptoJS.enc.Latin1.stringify(plaintextArray) + '</span>'); 
}; 

由於某些原因,代碼被卡在生成密鑰上(也許10k迭代對於CryptoJS來說太多了?多數民衆贊成在iOS上使用的迭代)

我已經嘗試了一堆不同的東西,這與輸出是垃圾im實際上並沒有得到解密消息。任何幫助將不勝感激。如果您打算推薦SJCL,請提供一些代碼。 RNCryptor使用它自己的消息格式。我使用它,因爲它提供了隨機iv。如果你知道任何一個,請推薦一個不同的庫。

謝謝閱讀。

+0

我有類似的問題。你知道如何使用JavaScript中的RNCryptor相同的數據格式嗎? – freshking

+0

我也對JavaScript中的加密數據格式非常感興趣。你也管理過嗎? – freshking

+0

因爲要求改變,我並沒有放棄這條路線。 –

回答

0

請遵守RNCryptor文件格式的文檔:https://github.com/RNCryptor/RNCryptor-Spec/blob/master/RNCryptor-Spec-v3.md

您應該能夠從文件中獲得所有必要的數據,並添加您的共享的祕密......

規範RNCryptor數據格式版本3

Byte:  | 0 | 1 |  2-9  | 10-17 | 18-33 | <-  ...  -> | n-32 - n | 
Contents: | version | options | encryptionSalt | HMACSalt | IV | ... ciphertext ... | HMAC | 
  • 版本(1個字節):數據格式版本。目前3.
  • 選項(1個字節): 位0 - 使用密碼
  • encryptionSalt(8個字節):當且僅當選項包含 「使用密碼」
  • HMACSalt(8個字節):當且僅當選項包括「使用 密碼」
  • IV(16個字節)的密文(可變) - 在CBC模式 HMAC加密(32個字節)

所有數據是網絡順序(大端)。