Я новичок в шифровании, и я пытаюсь получить симметричное шифрование с использованием 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"];
Вот вывод, выходящий через веб-сокеты
КОД 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>');
};
По какой-то причине код зависает при генерации ключа (может быть, 10 000 итераций слишком много для CryptoJS??? это итерации, используемые в IOS)
Я пробовал кучу разных вещей с этим, и вывод - мусор, я на самом деле не получаю расшифрованное сообщение. Любая помощь будет принята с благодарностью. Если вы собираетесь рекомендовать SJCL, укажите код. RNCryptor использует собственный формат сообщений. Я использую его из-за рандомизированного iv, который он предоставляет. Пожалуйста, порекомендуйте другую библиотеку, если вы знаете о ней.
Спасибо за прочтение.