openssl如何使用PBKDF2构造从密码派生的密钥?

谢继来

我正在使用Java模块来解密由openssl加密的消息,

openssl aes-256-cbc -k *** -a -pbkdf2 -iter 1 -md sha256

但没有成功。

经过一番调查,发现问题是我无法从给定的密码短语和盐中获取正确的KEY和IV。

这是代码:

$ openssl aes-256-cbc -k hi -a -S 4142434445464748 -md sha256 -pbkdf2 -iter 1 -P
salt=4142434445464748
key=187DC06E1AF1278348E5EFE761FDE3133DF42B03CF64E1B286E50E58238AEFB5
iv =1949A8BB58205A5C04BB28AD1947016C

$ echo hiABCDEFGH | hd
00000000  68 69 41 42 43 44 45 46  47 48 0a                 |hiABCDEFGH.|
0000000b

$ echo -n hiABCDEFGH | sha256sum 
8c8a825dbab83fbe7fb58552e26bb98aa3af20e7e6294e04ae6422a86906606b  -

根据EVP_BytesToKey函数,

密钥推导算法

密钥和IV通过将D_1,D_2等串联起来得到,直到有足够的数据可用于密钥和IV为止。D_i定义为:

D_i = HASH ^ count(D_(i-1)||数据||盐)其中|| 表示连接,D_0为空,HASH是使用的摘要算法,HASH ^ 1(data)仅是HASH(数据),HASH ^ 2(data)是HASH(HASH(数据)),依此类推。

因此,对于一次迭代,关键应该是:

KEY = SHA256(password || salt)

那是8c8a825d...但是,openssl的结果是187DC06E...

那么,openssl如何计算派生密钥?

马特·卡斯威尔

您使用了“ -pbkdf2”标志,这意味着您正在使用PBKDF2一个密钥派生函数(KDF),而不是实现的传统KDF EVP_BytesToKey

PBKDF2在RFC 2898中定义:https//www.ietf.org/rfc/rfc2898.txt

此处记录了相关的OpenSSL功能:https : //www.openssl.org/docs/man1.1.1/man3/PKCS5_PBKDF2_HMAC.html

上面的RFC是指伪随机函数(PRF)。由于您指定了SHA256的摘要,因此使用的PRF为HMAC-SHA256,密码为密钥。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何解决:警告:使用了不推荐使用的密钥派生。使用-iter或-pbkdf2会更好

来自分类Dev

PBKDF2密码存储-如何验证?

来自分类Dev

如何从密码和 PBKDF2 迭代中获取原始密钥数据

来自分类Dev

使用带有128位密钥的AES和PBKDF2的Java密码体系结构进行文件加密

来自分类Dev

哪些默认参数使用OpenSSL -pbkdf2?

来自分类Dev

HKDF或PBKDF2用于生成对称加密密钥?(Python密码学)

来自分类Dev

pbkdf2如何工作?

来自分类Dev

使用 pkcs11interop、c#、windows Visual Studio 2010 生成 PBKDF2 密钥

来自分类Dev

在多线程应用程序中使用基于openssl的pbkdf2

来自分类Dev

如何从生成的 PBKDF2 密码的字节数组中获取字符串

来自分类Dev

我如何正则表达式验证用户提交的以 PBKDF2 编码的密码

来自分类Dev

在.NET中使用PBKDF2和HKDF进行密码哈希处理

来自分类Dev

使用盐和迭代计数的用户密码的Java / Node PBKDF2哈希-等效节点

来自分类Dev

在C#和NodeJS中生成PBKDF2密钥

来自分类Dev

PBKDF2 Python密钥与.NET Rfc2898

来自分类Dev

OpenSSL:-pbkdf2选项不再受支持?

来自分类Dev

与密码一起存储PBKDF2设置

来自分类Dev

是否可以恢复PBKDF2哈希密码?

来自分类Dev

如何使用PBKDF2在Java和Ruby中生成相同的安全哈希

来自分类Dev

如何在没有nodeJS的情况下使用cryptoJS的函数pbkdf2

来自分类Dev

如何使用openssl对公共密钥的串联进行密码签名

来自分类Dev

OpenSSL 1.1.1b警告:解密使用OpenSSL 1.1.0g加密的文件时,使用-iter或-pbkdf2会更好。

来自分类Dev

如何在mongoDB中存储加密pbkdf2?

来自分类Dev

在Java和PHP中使用PBKDF2

来自分类Dev

jasypt PBKDF2实现

来自分类Dev

存储PBKDF2迭代

来自分类Dev

javascript和iOS中的PBKDF2哈希生成不同的密钥

来自分类Dev

这个用于密码生成的pbkdf2散列的PHP实现被认为安全吗?

来自分类Dev

如何使用openssl生成密钥

Related 相关文章

  1. 1

    如何解决:警告:使用了不推荐使用的密钥派生。使用-iter或-pbkdf2会更好

  2. 2

    PBKDF2密码存储-如何验证?

  3. 3

    如何从密码和 PBKDF2 迭代中获取原始密钥数据

  4. 4

    使用带有128位密钥的AES和PBKDF2的Java密码体系结构进行文件加密

  5. 5

    哪些默认参数使用OpenSSL -pbkdf2?

  6. 6

    HKDF或PBKDF2用于生成对称加密密钥?(Python密码学)

  7. 7

    pbkdf2如何工作?

  8. 8

    使用 pkcs11interop、c#、windows Visual Studio 2010 生成 PBKDF2 密钥

  9. 9

    在多线程应用程序中使用基于openssl的pbkdf2

  10. 10

    如何从生成的 PBKDF2 密码的字节数组中获取字符串

  11. 11

    我如何正则表达式验证用户提交的以 PBKDF2 编码的密码

  12. 12

    在.NET中使用PBKDF2和HKDF进行密码哈希处理

  13. 13

    使用盐和迭代计数的用户密码的Java / Node PBKDF2哈希-等效节点

  14. 14

    在C#和NodeJS中生成PBKDF2密钥

  15. 15

    PBKDF2 Python密钥与.NET Rfc2898

  16. 16

    OpenSSL:-pbkdf2选项不再受支持?

  17. 17

    与密码一起存储PBKDF2设置

  18. 18

    是否可以恢复PBKDF2哈希密码?

  19. 19

    如何使用PBKDF2在Java和Ruby中生成相同的安全哈希

  20. 20

    如何在没有nodeJS的情况下使用cryptoJS的函数pbkdf2

  21. 21

    如何使用openssl对公共密钥的串联进行密码签名

  22. 22

    OpenSSL 1.1.1b警告:解密使用OpenSSL 1.1.0g加密的文件时,使用-iter或-pbkdf2会更好。

  23. 23

    如何在mongoDB中存储加密pbkdf2?

  24. 24

    在Java和PHP中使用PBKDF2

  25. 25

    jasypt PBKDF2实现

  26. 26

    存储PBKDF2迭代

  27. 27

    javascript和iOS中的PBKDF2哈希生成不同的密钥

  28. 28

    这个用于密码生成的pbkdf2散列的PHP实现被认为安全吗?

  29. 29

    如何使用openssl生成密钥

热门标签

归档