首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用三重数据加密标准(3DES)和PKCS7填充对字符串进行加密

使用三重数据加密标准(3DES)和PKCS7填充对字符串进行加密
EN

Stack Overflow用户
提问于 2020-04-01 14:45:53
回答 1查看 406关注 0票数 1

要求:

我有一个Ruby on rails应用程序,我需要执行以下操作。

以下字符串应使用3DES算法和工作密钥进行加密。ABJGTU9的加密值将为vV51P0OGXt0=

工作密钥为A5157A0D77B24AEA868AD73288366826

本文中提到的3DES算法对数据进行加密的步骤如下: i.使用密钥的左半部分,使用CBC加密方式和PKCS7填充对数据进行加密。二、采用CBC加密方式,使用密钥的右半部分解密数据,无需填充。三、采用CBC加密方式,使用密钥的左半部分进行数据加密,无需填充。

我尝试了以下article,这就是我所做的,我的输出是"hsYUuA/Mo6A=\n" is vV51P0OGXt0=

代码语言:javascript
复制
  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

我不确定我是不是走对了路。

EN

回答 1

Stack Overflow用户

发布于 2020-04-02 22:05:12

问题中提及的方案有很多地方是错误的:

  1. 密钥是两个密钥的三重DES密钥,你需要对它进行十六进制解码,而不是在it;
  2. if上执行MD5你的代码不能使用128位的DES密钥,你应该复制前8个字节并将它们附加到密钥的末尾(因此DES密钥1和DES密钥3是相同的)- OpenSSL应该可以很好地使用16字节的密钥;步骤i、ii和iii中描述的加密方法仅适用于需要加密的每个单独的块-如果您已经使用
  3. ,则不需要它

默认情况下,OpenSSL已经使用PKCS#7填充进行填充,因此没有理由为此做任何特殊的事情。

CBC要求使用相同密钥的每个加密操作都需要一个唯一的、不可预测的IV,这似乎是所描述的方案中所缺少的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60965029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档