我正在嘗試將此 PHP 代碼轉換為 Ruby,但結果不一樣。我究竟做錯了什么?
PHP
$iv = str_repeat('0', 16);
$passphrase = str_repeat('0', 32);
$encrypted = openssl_encrypt('Hello', 'AES-256-CBC', $passphrase, 0, $iv);
echo $encrypted; // => lfbW8JcPq6dkEnmY0hG7Vw==
紅寶石
cipher = OpenSSL::Cipher.new('AES-256-CBC').encrypt
cipher.iv = '0' * 16
cipher.key = '0' * 32
encrypted = cipher.update('Hello') cipher.final
puts encrypted # => \x95\xF6\xD6\xF0\x97\x0F\xAB\xA7d\x12y\x98\xD2\x11\xBBW
uj5u.com熱心網友回復:
結果基本相同。
如果您嘗試編碼 AES 256 CBC,您可以點擊此鏈接:https ://gchq.github.io/Cyber??Chef/#recipe=AES_Encrypt({'option':'UTF8','string':'000000000000000000000000000000000'% 7D,{'option':'UTF8','string':'0000000000000000'},'CBC','Raw','Hex',{'option':'Hex','string':'' })&輸入=SGVsbG8
如您所見,我已使用您的密鑰和 IV(均以 UTF8 格式)將“hello”編碼為 AES CBC
HEX 格式的結果95f6d6f0970faba764127998d211bb57基本上匹配 Rails 字串減去轉義序列\x
現在 PHP 字串有點不同,但這是因為它是 BASE 64 編碼的。
你可以去這里https://base64.guru/converter/encode/hex并復制95f6d6f0970faba764127998d211bb57到頂部的框中,結果將是lfbW8JcPq6dkEnmY0hG7Vw==
編輯
請注意 Rails 字串與 Cyber??Chef 在最后一個字符中提供的 Hex 略有不同。也許有人可以提供更多關于 Rails 表示法與 HEX 略有不同的細節,以及轉義序列\x。我讀過這對 C 語言來說很常見(Ruby 是用 C 編碼的,這可以用 來解釋 C 符號\x)。
uj5u.com熱心網友回復:
我建議您使用Base64#encode64來獲得與您的 php 示例相同的結果。
require 'Base64'
puts Base64.encode64(encrypted) # => lfbW8JcPq6dkEnmY0hG7Vw==
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/519785.html
