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

时间:2015-09-16 07:56:38

标签: java security authentication base64

我正在创建一个网站,每个新用户创建的网站(我现在正在做的)将生成一个auth-key生成的Base64 encodingauth-key很重要,因为几乎所有执行的操作都需要用户的auth-key。当我在Base64-Padding上阅读此article并创建了一些或多或少相同unique-name的用户时,问题就开始了(加密是使用unique-name和{{1创建用户的位置)。我看到生成的密钥非常相似。然后我又浏览了一些资源,发现它非常容易解码。

自从我一直想知道如果使用LocalDateTime后我面临的安全漏洞是什么?有多糟糕?网站有多脆弱等等?

除了上述问题,我想知道何时应该使用Base64编码,何时不应该?如果不是Base64 encoding,我还应该使用什么?

注意:我在Java中生成Base64,加密位于auth-key。 谢谢。

2 个答案:

答案 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