Java8VSPython2.7pbkdf2散列不同的输出散列字母大小写

2024-10-02 12:31:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我以前用Python编写了一个函数,使用PBKDF2对目标字符串进行混淆:

from hashlib import pbkdf2_hmac
from binascii import hexlify

def garbleString(string, salt, iterations, hash_algorithm):
    target = str.encode(string)
    dk = pbkdf2_hmac(hash_algorithm, target, salt, iterations)
    hash = hexlify(dk)
    return (hash, salt, iterations)

>>> garbleString("1000000000","salt",100000,'sha256')
('d973f4855206bd777b25355782f1b14bf06fb395bf49a26086035b3b8820a74b', 'salt',  100000)

基于这个页面,这个函数是正确的——它为相同的输入生成相同的哈希。http://www.neurotechnics.com/tools/pbkdf2

我现在正在尝试在Java中实现相同的功能,我现在的工作是:

^{pr2}$

这将生成散列“D973F48555206BD777B25355782F1B14BF06FB395BF49A26086035B3B8820A74B”,这是相同的,只是字母大小写不同。外壳有问题吗?在


Tags: 函数fromimporttargetstringhashhmacalgorithm
1条回答
网友
1楼 · 发布于 2024-10-02 12:31:55

不,外壳不重要。

如果你检查散列,你会发现只有从A到F的字母。这不是一个真正的字符串,而是一个hexadecimal (base 16) number相当于983567631754382247384455306401383784335874788493262068788065753180381513935691。

  • A₁₆(基数16中的A)与10₁₀(基数10中的10)相同
  • B₁₆为11₁₀
  • C₁₆为12₁₀
  • D₁₆为13₁₀
  • E₁₆为14₁₀
  • F₁₆为15₁₀

数字是大写还是小写并不重要。意思是一样的。

您可以在Python解释器中看到这一点,其中前导的0x表示十六进制数:

>>> hex(12)
'0xc'
>>> 0xf
15
>>> 0xF
15

相关问题 更多 >

    热门问题