我有在 ColdFusion 中加密的数据,我试图在 Ruby 中解密。我无法让输出匹配。
在 ColdFusion 方面,我有这样的事情:
<cfset key = 'DiYVka4mAYk=' />
<cfset str = 'hello' />
<cfset enc = encrypt(str, key, 'des', "base64") />
<cfset dec = decrypt(enc, key, 'des', "base64") />
<cfoutput>
#str# <!--- 'hello' --->
<br />
#enc# <!--- '3rNKAnEu+VA=' --->
<br />
#dec# <!--- 'hello' --->
</cfoutput>
同样,在 Ruby 中实现:
require 'openssl'
require 'base64'
str = 'hello'
key = 'DiYVka4mAYk='
des = OpenSSL::Cipher.new('des')
des.encrypt
des.key = key
data = des.update(str) + des.final
enc = Base64.encode64(data)
des.decrypt
des.key = key
dec = des.update(Base64.decode64(enc)) + des.final
puts str # => 'hello'
puts enc # => 'wVQs6NjOZwM='
puts dec # => 'hello'
两者都有效,但加密的字符串不同。所以在 ColdFusion 和 Ruby 之间传递加密数据是行不通的。
密钥是使用 ColdFusion 的generateSecretKey()
函数生成的。它看起来是 Base64 编码的,所以我尝试在 Ruby 中设置这样的密钥:
key = Base64.decode64('DiYVka4mAYk=')
同样,代码有效,但加密字符串不同。
关于密钥编码,我有什么遗漏吗?
另外,我认为在 ColdFusion 中将算法设置为“des”时可能会隐含更多信息。因此,我尝试使用以下命令在 ruby 中创建密码:
- 德斯
- 德式CBC
- DES-CFB
- des-ecb
- 德埃德
- des-ede-cbc
- des-ede-cfb
- des-ede-ofb
- 脱氧核糖核酸
同样,加密字符串的一些变化。但没有一个与原始 ColdFusion 版本相匹配。
注意:ColdFusion 加密已经使用了很长时间,所以我无法在这方面进行任何编辑。“修复”必须在 Ruby 中。