【发布时间】:2016-10-16 09:37:24
【问题描述】:
我的 AES-256 CBC Ruby encryption implementation 是 generating 32 字节密钥和 16 字节 iv:
key = SecureRandom.random_bytes(32) # => "m\xD4\x90\x85\xF9\xCD\x13\x98\xAB\v\xBB\xCD\x0E\x17\xFAA\xF9\x99\xAF\e\x8A\xB5\x8Ate\x93[m\x9As\xC7\xCB"
iv = SecureRandom.random_bytes(16) # => "\xDF\x95[\xD5\xDD(\x0F\xB8SE\xFCZr\xF1\xB1W"
ruby_cipher = SymmetricEncryption::Cipher.new(
key: key,
iv: iv,
cipher_name: 'aes-256-cbc'
)
ruby_cipher.encrypt("Hello!") # => 'qAnTLy7jyiLRkUqBnME8sw=='
问题:
如何将密钥和 iv 转换为十六进制字符串,以便将它们传输到其他应用程序?
上下文:
在另一个使用 Javascript via CryptoJS 的应用程序中,我需要接收密钥和 iv 并将它们转换回这样的字节:
CryptoJS.AES.encrypt(
"Hello!",
CryptoJS.enc.Utf8.parse(key),
{ iv: CryptoJS.enc.Utf8.parse(iv) }
).toString() // 'qAnTLy7jyiLRkUqBnME8sw=='
在第三个 PHP 应用程序中,我将像这样直接使用十六进制字符串:
<?php
openssl_encrypt(
'Hello!', 'aes-256-cbc',
key,
0,
iv
); // => 'qAnTLy7jyiLRkUqBnME8sw=='
【问题讨论】:
标签: ruby encryption binary hex