Прежде всего, позвольте мне сказать, что я не криптограф каким-либо образом, и я не очень хорошо пишу c-код, поэтому, пожалуйста, извините меня, если ответ на этот вопрос очевидно или ответили. Я разрабатываю программу обмена сообщениями и не могу использовать TLS на целевой платформе. В результате мне нужно найти способ шифровать каждое сообщение, используя симметричный шифр с общим общим ключом, например AES.Программа шифрования, которая работает с NodeJs и mbedtls
Я ищу способ шифрования и расшифровки данных между программой mbedtls (например, aescrypt2) на одном конце и программой nodejs на другом. Mbedtls, ранее polarssl, представляет собой библиотеку, которая обеспечивает шифрование для встроенных устройств. К исходному коду относятся некоторые примеры программ, таких как aescrypt2, rsaencrypt, ecdsa и crypt_and_hash.
Aescrypt2 прекрасно работает, когда результирующие зашифрованные данные также дешифруются с использованием aescrypt2, но я не могу получить данные, зашифрованные с помощью aescrypt, для дешифрования с использованием криптографии nodejs или любой другой программы, в том числе openssl. Например:
echo 'this is a test message' >test.txt
aescrypt 0 test.txt test.out hex:E76B2413958B00E193
aescrypt 1 test.out test.denc hex:E76B2413958B00E193
cat test.denc
this is a test message
С OpenSSL:
openssl enc -in out.test -out outfile.txt -d -aes256 -k E76B2413958B00E193
bad magic number
некоторый код узла образца, который в настоящее время не работает
var crypto = require('crypto');
var AESCrypt = {};
AESCrypt.decrypt = function(cryptkey, iv, encryptdata) {
encryptdata = new Buffer(encryptdata, 'base64').toString('binary');
var decipher = crypto.createDecipheriv('aes-256-cbc', cryptkey, iv),
decoded = decipher.update(encryptdata, 'binary', 'utf8');
decoded += decipher.final('utf8');
return decoded;
}
AESCrypt.encrypt = function(cryptkey, iv, cleardata) {
var encipher = crypto.createCipheriv('aes-256-cbc', cryptkey, iv),
encryptdata = encipher.update(cleardata, 'utf8', 'binary');
encryptdata += encipher.final('binary');
encode_encryptdata = new Buffer(encryptdata, 'binary').toString('base64');
return encode_encryptdata;
}
var cryptkey = crypto.createHash('sha256').update('Nixnogen').digest(),
iv = 'a2xhcgAAAAAAAAAA',
buf = "Here is some data for the encrypt", // 32 chars
enc = AESCrypt.encrypt(cryptkey, iv, buf);
var dec = AESCrypt.decrypt(cryptkey, iv, enc);
console.warn("encrypt length: ", enc.length);
console.warn("encrypt in Base64:", enc);
console.warn("decrypt all: " + dec);
Это приводит либо ошибки или мусора текста каждый раз. Я также попытался настроить различные вещи.
Я пробовал это сто разных способов, в том числе с использованием аргумента -pass pass:password
безрезультатно. Используя nodejs, я либо получил плохие ошибки расшифровки, либо искаженную бессмыслицу после расшифровки. Я пробовал использовать множество обучающих программ в сети, таких как this, и предложения от this thread, и все остальное, что я могу найти. Я читал, что разные программы шифрования используют разные стандарты, поэтому совместимость между платформами/программами/языками не всегда гарантирована, но я думаю, что кто-то раньше был в этом предрассудке и знает решение?
Как бы я, используя nodejs, расшифровать данные, зашифрованные aescrypt2 (или такой программой)? Я только смог заставить его работать с помощью вызова exec системы и с помощью узла выполнить aescrypt2 для дешифрования/шифрования данных, что не является идеальным, поскольку оно значительно замедляет работу. Я открыт для использования другой программы, чем aescrypt2. Единственным требованием является то, что он должен работать в Linux, не может использовать openssl libs (потому что они не поддерживаются в целевой системе), программа должна быть небольшой и простой из-за ограничений по пространству, и, прежде всего, шифрование/дешифрование должно быть совместим с nodejs. Любая помощь приветствуется.
Как этот код на C? –
В настоящее время я пытаюсь использовать пример программы mesblt aescrypt: https://github.com/ARMmbed/mbedtls/blob/development/programs/aes/aescrypt2.c, и она не работает ни с одной из библиотек узла cryto. Я ищу источник, который делает, или способ заставить его работать. –
замедлить работу и сделать некоторое исследование о том, как написать код. –