我是新來加密,我想通過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。如果你知道任何一個,請推薦一個不同的庫。
謝謝閱讀。
我有類似的問題。你知道如何使用JavaScript中的RNCryptor相同的數據格式嗎? – freshking
我也對JavaScript中的加密數據格式非常感興趣。你也管理過嗎? – freshking
因爲要求改變,我並沒有放棄這條路線。 –