Python可以识别使用Java中的BCrypt的哈希密码吗?

时间:2013-06-06 02:17:39

标签: java python cryptography bcrypt

我打算使用 bcrypt 哈希用户密码,并将这些哈希密码存储在数据库中。

处理用户帐户创建并将散列密码插入数据库的服务器是用Java编写的。

需要访问用户信息(包括散列密码)的另一台服务器是用Python编写的。

我计划将jBCrypt用于Java端,但在此之前,我想确保能够识别/使用Python端的这些散列密码。

我理解的是,只要Python BCrypt实现与Java实现相同,这应该没问题。

那么,我可以使用Python中使用jBCrypt的密码哈希吗?怎么样?

提前致谢!

1 个答案:

答案 0 :(得分:1)

最好的方法就是实际尝试。 假设两种实现都是正确的,它们应该是兼容的,只要您在必要时注意重新编码数据。

通常,散列存储在内存中,可以是原始散列的字节数组,也可以是ASCII十六进制表示形式。了解它所使用的编码的最佳方法是将其实际打印到控制台:如果它看起来像垃圾,它将是一个原始字节数组;如果它打印一个十六进制字符串(0-9和a-f),它的ascii编码为十六进制。

Salt可能会像哈希一样存储。轮数是整数。由您来共同存储所有这些数据。如果你需要在Python中将ascii十六进制字符串转换为字节数组(实际上是一个字符串),你可以使用string.encode:

>>> 'hello world'.encode('hex')
'68656c6c6f20776f726c64'
>>> '68656c6c6f20776f726c64'.decode('hex')
'hello world'

对于python中的bcrypt实现,您可能想尝试py-bcrypt