使用PBKDF2加密的密码的散列值的数据类型应该是什么?

时间:2016-02-17 11:44:26

标签: hash encoding plsql sqldatatypes pbkdf2

我正在尝试学习使用PBKDF2哈希函数在数据库中存储密码。我有一个粗略的程序,我将用于生成散列函数。但是当我在PL / SQL Developer中创建将保存生成的哈希密码的表时,我应该为加密的密码变量声明什么数据类型?

这可能是一个蹩脚的问题,但我试图在网上学习。如果我能获得进一步研究的链接,那将是一个巨大的帮助。谢谢。请帮忙

1 个答案:

答案 0 :(得分:0)

第一个链接一如既往地是Thomas Pornin's canonical answer to How to securely hash passwords

数据库中的存储

  • 哈希可以以BINARY格式存储,用于最少的转换和最小的字节数;请参阅下面的尺寸。

    • 或者,在转换为十六进制后将其存储在CHAR中,这会花费转换并使BINARY大小的字节加倍

    • 或者,在转换为Base64之后将其存储在CHAR中,这需要转换成本,并且4/3表示BINARY大小加上填充的字节数

    • 即。使用所有64字节输出的PBKDF2-HMAC-SHA-512将是

      • BINARY(64)as binary

      • CHAR(128)为十六进制

      • CHAR(88)as Base64

  • 迭代次数应存储在INT中,以便以后可以轻易增加

  • salt必须是每个用户的加密随机值,可以以最小字节数的BINARY格式存储,并且应该至少为12,最好是16-24字节长。

    • 即。对于16字节二进制盐

      • BINARY(16)as binary

      • CHAR(32)为十六进制

      • CHAR(24)as Base64

  • 可选的密码哈希算法版本为小型INT类型

    • 即。 1表示PBKDF2-HMAC-SHA-512,后来如果你改为BCrypt,2表示BCrypt等等。

正常的PBKDF2注意事项

  • 考虑使用PBKDF2-HMAC-SHA-512,因为SHA-512特别具有64位操作,可以减少大多数基于GPU的攻击者在2016年初对您的优势。

  • 使用高(数十万或数万)迭代。

  • 不要求比本机哈希函数支持更多的PBKDF2输出字节

    • SHA-512< = 64字节

    • SHA-384< = 48字节

    • SHA-256< = 32字节

    • SHA-224< = 28字节

    • MD5 <= 20字节