盐与AES256的使用不当,并通过网络发送数据

时间:2016-01-01 21:04:28

标签: servlets encryption spring-security aes salt

我正在尝试加密NSString内容并将其发送到服务器。

AES密钥,不应该是简单的纯文本。 例如:"密码$ 5"。

应该添加一个盐,所以就像randomData + Password $ 5。

此密钥将用于加密。

所以,对于服务器,我将发送像这样的JSON

{
 password:"Encrypted Password with AES256"
}

现在,我的问题是密钥是随机的,因为盐是随机的,那么我如何解密AES256收到的加密字符串呢?

虽然我知道钥匙(密码5美元),但我不知道盐?

我是否必须将盐发送到服务器(对于它来说最好的地方,如果它在标题中或在响应本身中),是否安全?

{
password: "Encrypted Password with AES256",
salt: "Random Hex bytes used"
}

另外,有什么方法可以使用Spring Restful服务处理这个问题吗?

2 个答案:

答案 0 :(得分:2)

只需使用https,所有数据和查询字符串都是加密的。添加证书固定甚至MITM攻击都可以减轻。您的加密将不会更好。

如果您决定使用RNCryptor进行自己的加密。没有沉浸在密码学中的人几乎没有机会获得安全权。

在服务器上不保存密码,用盐通过PBKDF2运行,并保存盐,迭代次数和散列密码。

答案 1 :(得分:1)

如果您的目标是加密通过网络发送的数据,则应使用安全连接来处理此问题。这是在服务器之间,而不是由应用程序代码处理。

如果数据本身应该加密,那么你想要在服务器端处理盐的生成,加密。

对于密码,您需要哈希它们而不加密它们。永远不应该有解密密码的理由。您始终可以对提供的密码进行哈希处理并比较哈希值。