我正在创建一个网站,每个新用户创建的网站(我现在正在做的)将生成一个auth-key
生成的Base64 encoding
。 auth-key
很重要,因为几乎所有执行的操作都需要用户的auth-key
。当我在Base64-Padding
上阅读此article并创建了一些或多或少相同unique-name
的用户时,问题就开始了(加密是使用unique-name
和{{1创建用户的位置)。我看到生成的密钥非常相似。然后我又浏览了一些资源,发现它非常容易解码。
自从我一直想知道如果使用LocalDateTime
后我面临的安全漏洞是什么?有多糟糕?网站有多脆弱等等?
除了上述问题,我想知道何时应该使用Base64编码,何时不应该?如果不是Base64 encoding
,我还应该使用什么?
注意:我在Java中生成Base64
,加密位于auth-key
。
谢谢。
答案 0 :(得分:0)
在安全性方面,使用Base64不是 encrypt 要保密的字符串,它用于 编码 它。
在基本身份验证中,例如,编码的目的是将可能在用户名,密码或令牌中的非HTTP兼容字符编码为与HTTP兼容的字符。
编码不提供任何机密性,因为您需要加密字符串。
将加密视为安全位,并且编码是使得字符串在HTTP中运行良好。
生成令牌的常用方法是先对其进行加密,然后对其进行编码。
答案 1 :(得分:0)
正如你给出的文章的第一行所说:
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属性是一个随机生成的字符串,增强了安全性,使其更难破解。 要将字节数组转换为字符串,请参阅此post