【发布时间】:2020-04-01 06:45:53
【问题描述】:
要求:
我有一个 Ruby on rails 应用程序,我需要执行以下操作。
以下字符串应使用 3DES 算法和工作密钥进行加密。 ABJGTU9 的加密值为 vV51P0OGXt0=
工作密钥是 A5157A0D77B24AEA868AD73288366826
以下文档中提到的 3DES 算法使用以下步骤进行数据加密: 一世。使用具有 CBC 密码模式和 PKCS7 填充的密钥的左侧部分加密数据。 ii.使用具有 CBC 密码模式且无填充的密钥的右侧部分解密数据。 iii.使用具有 CBC 密码模式且不填充的密钥的左侧部分加密数据。
我尝试了以下article
这就是我所做的,我的输出是 "hsYUuA/Mo6A=\n" 预期是 vV51P0OGXt0=
cipher = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC')
cipher.encrypt # Must be called before anything else
# Generate the key and initialization vector for the algorithm.
# Alternatively, you can specify the initialization vector and cipher key
# specifically using `cipher.iv = 'some iv'` and `cipher.key = 'some key'`
# cipher.pkcs5_keyivgen('SOME_PASS_PHRASE_GOES_HERE')
key = Digest::MD5.base64digest('A5157A0D77B24AEA')
cipher.key = key
data = "ABJGTU9"
output = cipher.update(data)
output << cipher.final
output
end
我不确定我是否走对了。
【问题讨论】:
-
您提供的工作密钥很可能就是密钥;即您不应该执行 MD5 步骤。编辑(更详细):MD5 步骤通常用于将文本密码转换为特定大小的字节数组。您提供的工作密钥看起来像 16 字节编码为十六进制。
-
另外;由于 IV 不同,您的输出可能与预期不同。我不知道Ruby的具体情况;但要确保 IV 匹配(我猜你错过了指定 IV 的步骤)
-
@clausc 密码的密钥应该是 24 字节,所以我使用了 MD5 base64 摘要,它给了我预期的大小,但正如你提到的,iv 可能是一个问题,我会检查一下跨度>
-
请注意,您的描述是:用左边部分加密;用正确的部分解密。带有 EDE 的 3DES 可以为此使用 16 字节密钥 - 事实上,这与您的描述完全匹配。参见en.wikipedia.org/wiki/Triple_DES,键控选项 2
-
@clausc 他们甚至在发送加密之前就输入密钥,就像这样
CryptoJS.enc.Hex.parse(sec.substr(0, len));我现在有整个加密js
标签: ruby-on-rails encryption cryptography