【发布时间】:2018-05-08 09:27:45
【问题描述】:
美好的一天,我已使用 google/tink 来加密密码,以便使用以下步骤存储在数据库中:
// 1. Generate the key material.
KeysetHandle keysetHandle =
KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);
// 2. Get the primitive.
Aead aead = AeadFactory.getPrimitive(keysetHandle);
// 3. Use the primitive to encrypt a plaintext,
byte[] ciphertext = aead.encrypt(plaintext, aad);
它基本上将密码转换为字节,但是当我将其转换为字符串存储到数据库中时,它以这种格式存储加密的密码:-�@~�k�D߶{�。
但我想使用 tink 加密以11As7737Cs9ue9oo09 之类的格式存储密码。
有什么办法吗?
【问题讨论】:
-
查看标签。在设计合理的安全系统中没有密码加密之类的东西。
-
不要加密密码,当攻击者得到数据库时,他也会得到加密密钥。仅使用散列函数是不够的,仅添加盐对提高安全性无济于事。使用随机盐在 HMAC 上迭代大约 100 毫秒,然后将盐与哈希一起保存。使用
PBKDF2、Rfc2898DeriveBytes、Argon2、password_hash、Bcrypt等函数或类似函数。关键是让攻击者花费大量时间通过蛮力查找密码。 -
@zaph 感谢您的建议,一定会这样做
标签: java password-encryption tink