安全性-为使用Base64的用户生成Auth-Key



我正在创建一个网站,每个新用户创建(这就是我现在正在做的)将有一个auth-key生成,这是在Base64 encodingauth-key很重要,因为几乎所有执行的操作都需要用户的auth-key。当我阅读这篇关于Base64-Padding的文章并创建了几个或多或少具有相同unique-name的用户时,问题就开始了(加密是使用创建用户的unique-nameLocalDateTime完成的)。我看到生成的密钥都非常相似。然后我又查阅了一些资料,发现它非常容易解码。

自从我一直在想如果我使用Base64 encoding,我所面临的安全漏洞是什么?情况有多糟?网站有多脆弱等等?

除了上面的问题,我想知道什么时候我应该使用Base64编码,什么时候我不应该?如果不是Base64,我应该用什么呢?

注意:我在Java中生成auth-key,加密在AES中。谢谢你。

在安全性方面,Base64的使用不是对要保密的字符串进行加密,而是对进行编码。

例如,在基本身份验证中,编码的目的是将用户名、密码或令牌中的非http兼容字符编码为http兼容的字符。

编码不提供任何机密性,因此需要对字符串进行加密。

可以把加密想象成安全位,而编码是使字符串与HTTP很好地配合。

生成令牌的常用方法是先对其加密,然后对其编码。

正如你所给出的文章的第一行所说:

Base64是一组类似的二进制到文本编码方案通过将二进制数据转换成ASCII字符串格式表示二进制数据基数64表示。

由于Base64编码可以很容易地逆转(它已经为此设计),因此很容易突破您的身份验证。您不应该考虑使用Base64编码或任何密码加密,而应该使用MD5、SHA或其他哈希算法,因为从理论上讲,它们是不可逆转且唯一的。下面是MD5的一个例子:

public byte[] digestAuthKey(String login, Date d) {
   MessageDigest md = MessageDigest.getInstance("MD5");
   String key = login + SALT + d.getTime();
   return md.digest(key.getBytes());
}

SALT内容是一个随机生成的字符串,它增强了安全性,使其更难被破坏。要将字节数组转换为字符串,请参阅本文

最新更新