我正在尝试学习使用PBKDF2哈希函数在数据库中存储密码。我有一个粗略的程序,我将用于生成散列函数。但是当我在PL / SQL Developer中创建将保存生成的哈希密码的表时,我应该为加密的密码变量声明什么数据类型?
这可能是一个蹩脚的问题,但我试图在网上学习。如果我能获得进一步研究的链接,那将是一个巨大的帮助。谢谢。请帮忙
答案 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类型
考虑使用PBKDF2-HMAC-SHA-512,因为SHA-512特别具有64位操作,可以减少大多数基于GPU的攻击者在2016年初对您的优势。
使用高(数十万或数万)迭代。
不要求比本机哈希函数支持更多的PBKDF2输出字节
SHA-512< = 64字节
SHA-384< = 48字节
SHA-256< = 32字节
SHA-224< = 28字节
MD5 <= 20字节