目前,我正在使用编码方法对密码进行编码,这里是:
static encode = { String s ->
print(s)
MessageDigest md = MessageDigest.getInstance('SHA')
print(md)
md.update s.getBytes('UTF-8')
def result = Base64.encodeBase64 md.digest()
new String(result, "UTF-8");
}
那么,有没有可能解密它的方法?我尝试了decodeBase64()
并得到了结果:
[64, -67, 0, 21, 99, 8, 95, -61, 81, 101, 50, -98, -95, -1, 92, 94, -53, -37, -66, -17]
我接近成功吗?如何将其转换为字符串?
答案 0 :(得分:2)
没有SHA是单向散列,这意味着您无法获得给定散列的原始数据。单向散列使得存储人们的密码更加安全,因为即使有人获得了散列的副本,他们也无法轻易地反转散列并检索密码。
Base64是一种将二进制数据编码为ASCII文本的编码机制。它不是加密。如果你给我一个Base64编码的字符串,任何人都可以解码它并获得原始消息。一个很大的线索,它不安全是没有给Base64的密钥,这意味着它不会阻止任何人解码它。
您不应使用SHA存储密码。这些天太暴力了,所以你的密码很容易解码。 MD5和SHA不是安全的哈希值。您需要使用bcrypt或其他可调算法。