gpt4 book ai didi

ruby - 加密 - Ruby 和 ColdFusion 中的不同结果

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:37 26 4
gpt4 key购买 nike

我有在 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 之间传递加密数据是行不通的。

key 是使用 ColdFusion 的 generateSecretKey() 函数生成的。它看起来是 Base64 编码的,所以我尝试在 Ruby 中像这样设置 key :

key = Base64.decode64('DiYVka4mAYk=')

同样,代码有效,但加密的字符串不同。

关于 key 编码,我是否遗漏了什么?

此外,我认为在 ColdFusion 中将算法设置为“des”时可能隐含的信息更多。所以我尝试使用以下代码在 ruby​​ 中创建密码:

  • des-cbc
  • des-cfb
  • des-ecb
  • des-ede
  • des-ede-cbc
  • des-ede-cfb
  • des-ede-ofb
  • des-ofb

再次,加密字符串中的一些变体。但没有一个与原始 ColdFusion 版本匹配。

注意:ColdFusion 加密已经使用了很长时间,所以我无法在这方面进行任何编辑。 “修复”必须使用 Ruby。

最佳答案

按照要求,我会将我的评论转移到答案中:

您必须确保两端的密码模式、IV 和填充匹配。

1.8.7 和 1.9.3 中的 Ruby 默认值是 ECB,没有 IV 和 PCKS 填充。 ColdFusion 默认值相同。

但是,在 ruby​​ 1.9.2 或您的特定环境中,默认密码模式似乎不是 ECB,它正在更改输出。正如您评论的那样,手动将密码模式设置为 ECB (OpenSSL::Cipher.new("DES-ECB")) 可以解决此问题。

关于ruby - 加密 - Ruby 和 ColdFusion 中的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12893882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com