Совместное использование криптографической библиотеки Ruby и Node - PullRequest
1 голос
/ 30 июня 2011

У меня есть строка, зашифрованная с использованием шифрования aes-128-cbc с использованием Ruby и библиотеки EzCrypto .

Вот мой код шифрования в Ruby:

require 'rubygems'
require 'ezcrypto'

@pwd  = 'hello'; @salt = 'salt'

key = EzCrypto::Key.with_password @pwd,@salt, :algorithm=>"aes-128-cbc"

File.open('key.txt','w') do |file|
  file.write(key.to_s)
end

File.open('secret.txt','w') do |file|
  file.write(key.encrypt("hello"))
end

Теперь я хотел бы расшифровать эту строку с помощью Node.И я ничего не получаю обратно.Я должен делать что-то не так здесь.Ниже приведен мой код Node.

var crypto      = require('crypto');
var fs      = require('fs');

var secret = fs.readFileSync('secret.txt', 'binary');
var key    = fs.readFileSync('key.txt', 'base64');

var decipher = crypto.createDecipher('aes-128-cbc', key);
var string   = decipher.update(secret, 'binary', 'utf8');
string       += decipher.final('utf8');

console.log("STRING: ", string)

, который возвращает: STRING:

Любая помощь будет высоко ценится.

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

secret.txt содержит двоичный файл вместо ожидаемого UTF-8 / HEX.

0 голосов
/ 01 июля 2011

Это оказалось проблемой с реализацией Ruby OpenSSL. Если вы покопаетесь глубоко в источнике Руби, вы найдете это:

[https://github.com/ruby/ruby/blob/trunk/ext/openssl/ossl_cipher.c#L210][1]

Ruby всегда устанавливает iv или вектор инициализации в "OpenSSL для Ruby rulez!" что ИМХО смешно. Стандартное шифрование OpenSSL в Ruby никогда не будет работать с другими языками.

Значение EzCrypto не будет работать с Node: - (

Я написал свою собственную обертку для Ruby, которую я установил вручную. Все остальное становится на свои места после того, как это было исправлено.

Я действительно надеюсь, что это поможет кому-то еще. Взял меня навсегда, чтобы понять это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...