了解 Liferay 密码加密

Understanding Liferay Password Encryption

关于liferay中的密码加密 我发现liferay正在使用 PBKDF2WithHmacSHA1/160/128000 算法默认使用 128,000 轮生成 160 位哈希。

我可以通过在我的门户中应用以下类型来使用它们-ext.properties 文件

#passwords.encryption.algorithm=BCRYPT/10
#passwords.encryption.algorithm=MD2
#passwords.encryption.algorithm=MD5
#passwords.encryption.algorithm=NONE
#passwords.encryption.algorithm=PBKDF2WithHmacSHA1/160/128000
#passwords.encryption.algorithm=SHA
#passwords.encryption.algorithm=SHA-256
#passwords.encryption.algorithm=SHA-384
#passwords.encryption.algorithm=SSHA
#passwords.encryption.algorithm=UFC-CRYPT

使用默认类型“PBKDF2WithHmacSHA1/160/128000”我发现生成的每个密码都以前缀 "AAAAoAAB9A" 开头 喜欢:"AAAAoAAB9ACpjEM1K54bHX0UMY+3AgeAX3n50ZGERRK6MpxC"

I need to know that why every password is starting with this prefix while using the mentioned algorithm.

通过使用另一种算法“BCRYPT/10”,我发现我的密码以“$2a$10”开头,例如:“$2a$10$Xyx。o1kv1mIr8rtpr9sxwOP6AC9I/u7tAIlyfrzp8Vlqcek/CGdQ"

我是如何弄清楚“$2a$10”中的“10”的密码是用 10 轮的盐进行哈希处理的。这是正确的还是我理解错了?

Liferay默认使用PBKDF2WithHmacSHA1/160/128000,加密后的密码是"key size, number of rounds, salt and secret key bytes"的字节组合按顺序放在bytebuffer中然后Base64编码组合过来。

所以在"AAAAoAAB9ACpjEM1K54bHX0UMY+3AgeAX3n50ZGERRK6MpxC"中有前缀"AAAAoAAB9A"的原因是因为这是密钥大小和正在编码的轮数(即160/128000)字节缓冲区的组合整体转化为Base64。改变密钥大小和轮数你会想出一些不同的前缀。

让我们举个例子:"AAAAoAAB9ACpjEM1K54bHX0UMY+3AgeAX3n50ZGERRK6MpxC"

将其从 base64 编码为十六进制:“000000a0 0001f400 a98c4335 2b9e1b1d 7d14318f b7020780 5f79f9d1 91844512 ba329c42”

将 000000a0 从十六进制编码为十进制,您将得到 160,如密钥大小。

将 0001f400 从十六进制编码为十进制,您将像迭代一样得到 128000。

a98c4335 2b9e1b1d 是你的盐。

7d14318f b7020780 5f79f9d1 91844512 ba329c42 是哈希密码。