gpt4 book ai didi

javascript - RNCryptor IOS + Javascript 加密/解密 AES 256

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:53 27 4
gpt4 key购买 nike

我是加密新手,我正在尝试使用 AES256 通过 websockets 从移动应用程序到网页进行一些对称加密。

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

出于某种原因,代码在生成 key 时卡住了(对于 CryptoJS 来说,可能 10k 次迭代太多了???这就是 IOS 上使用的迭代)

我已经尝试了很多不同的东西,但输出是垃圾,我实际上并没有解密消息。任何帮助将不胜感激。如果您打算推荐 SJCL,请提供一些代码。 RNCryptor 使用自己的消息格式。我使用它是因为它提供了随机化的 iv。如果您也知道,请推荐其他图书馆。

感谢阅读。

最佳答案

请遵循 RNCryptor 文件格式的文档:https://github.com/RNCryptor/RNCryptor-Spec/blob/master/RNCryptor-Spec-v3.md

您应该能够从文件中获取所有必要的数据并添加您的共享 key ...

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 字节):iff 选项包括“使用密码”
  • hmacsalt(8个字节):iff选项包括“用途密码”
  • IV(16 字节)密文(可变)——用 CBC 加密模式 HMAC(32 字节)

所有数据均按网络顺序(大端)。

关于javascript - RNCryptor IOS + Javascript 加密/解密 AES 256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17871069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com