簡體   English   中英

RNCryptor IOS + Javascript加密/解密AES 256

[英]RNCryptor IOS + Javascript encryption / decryption AES 256

我是加密的新手,我正在嘗試通過websockets從移動應用程序到網頁的AES256進行對稱加密。

我使用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>');
};

由於某種原因,代碼在生成密鑰時停滯不前(對於CryptoJS來說可能是10k次迭代太多了,那就是在IOS上使用的迭代)

我已經嘗試了很多不同的東西,輸出是垃圾我實際上沒有得到消息解密。 任何幫助將不勝感激。 如果您打算推薦SJCL,請提供一些代碼。 RNCryptor使用自己的消息格式。 我使用它是因為它提供的隨機iv。 如果您也知道,請推薦其他圖書館。

謝謝閱讀。

請按照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   |
  • version(1字節):數據格式版本。 目前3。
  • options(1字節):bit 0 - 使用密碼
  • encryptionSalt(8字節):iff選項包含“使用密碼”
  • HMACSalt(8字節):iff選項包括“使用密碼”
  • IV(16字節)密文(變量) - 在CBC模式下加密HMAC(32字節)

所有數據均按網絡順序排列(big-endian)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM