0

我正在尝试将加密函数从 python 重写为 ruby​​,但没有得到相同的结果。我知道 des ecb 是不安全的,不推荐使用,但出于从 python 和 ruby​​ 移植的目的,这是必需的。

在python中使用pyDes,我有以下内容:

import pyDes
salt = 'HeresATwentyFourDigtSalt'
data = 'thing to encrypt'
cipher = pyDes.triple_des(salt, pyDes.ECB, pad=None, padmode=pyDes.PAD_PKCS5)
encrypted = cipher.encrypt(data)
base64.b64encode(encrypted)
'b4SlfbPj6BzFJ2djzu/DTbtmeZ6erKP8'

现在我想用 ruby​​ 得到相同的密文:

require "base64"
require "openssl"
salt = 'HeresATwentyFourDigtSalt'
data = 'thing to encrypt'
cipher = OpenSSL::Cipher::Cipher.new('DES-ECB')
cipher.encrypt
cipher.padding=0
cipher.key = salt
encrypted = cipher.update(data)
encrypted_final = encrypted + cipher.final
Base64.encode64(encrypted_final)
"pfHDx7yTWZ4vh8+AqiklPrNb+VHhcCyA\n"
4

1 回答 1

1

在发布问题时花了一些时间尝试一些变化后,我找到了解决方案。如果它对任何人有帮助,请在此处发布以供参考 - 密码应该是DES-EDE3并且填充设置为 1,并带有换行符。

require "base64"
require "openssl"
salt = 'HeresATwentyFourDigtSalt'
data = 'thing to encrypt'
cipher = OpenSSL::Cipher::Cipher.new('DES-EDE3')
cipher.encrypt
cipher.padding=0
cipher.key = salt
encrypted = cipher.update(data)
encrypted_final = encrypted + cipher.final
Base64.encode64(encrypted_final).gsub(/\n/, "")
'b4SlfbPj6BzFJ2djzu/DTbtmeZ6erKP8'
于 2018-09-24T14:44:57.910 回答