低估 Salt 与 AES256 的使用,并通过网络发送数据
Understating use of Salt with AES256 , and sending the data over the network
我正在尝试加密 NSString 内容并将其发送到服务器。
AES密钥,不应该是简单的明文。
例如:"Password".
应该加盐,所以就像randomData + Password$5.
此密钥将用于加密。
所以,我将向服务器发送一个 JSON 这样的
{
password:"Encrypted Password with AES256"
}
现在,我的问题是密钥是随机的,因为盐是随机的,那么我如何解密 AES256 接收到的加密字符串?
虽然我知道密钥(密码$5),但我不知道盐?
我是否必须将 salt 发送到服务器(什么是最好的地方,它应该在 header 中还是在响应本身中),它安全吗?
{
password: "Encrypted Password with AES256",
salt: "Random Hex bytes used"
}
此外,有什么方法可以使用 Spring Restful 服务来处理这个问题?
如果您的目标是加密通过网络发送的数据,您应该使用安全连接来处理。这是在服务器之间进行的,而不是由您的应用程序代码处理的。
如果你的数据本身应该被加密,那么你想要处理盐的生成,在 server-side.
上加密
对于密码,您需要对它们进行散列而不是加密。 de-crypt 密码永远不应该有任何理由。您可以随时散列提供的密码并比较散列值。
只需使用https,所有数据和查询字符串均已加密。添加证书固定,甚至可以减轻 MITM 攻击。你的加密也不会更好。
如果您决定自己加密,请使用 RNCryptor。不熟悉密码学的人几乎不可能获得正确的安全性。
在服务器上不保存密码,运行它通过PBKDF2加盐并保存盐、迭代计数和散列密码。
我正在尝试加密 NSString 内容并将其发送到服务器。
AES密钥,不应该是简单的明文。 例如:"Password".
应该加盐,所以就像randomData + Password$5.
此密钥将用于加密。
所以,我将向服务器发送一个 JSON 这样的
{
password:"Encrypted Password with AES256"
}
现在,我的问题是密钥是随机的,因为盐是随机的,那么我如何解密 AES256 接收到的加密字符串?
虽然我知道密钥(密码$5),但我不知道盐?
我是否必须将 salt 发送到服务器(什么是最好的地方,它应该在 header 中还是在响应本身中),它安全吗?
{
password: "Encrypted Password with AES256",
salt: "Random Hex bytes used"
}
此外,有什么方法可以使用 Spring Restful 服务来处理这个问题?
如果您的目标是加密通过网络发送的数据,您应该使用安全连接来处理。这是在服务器之间进行的,而不是由您的应用程序代码处理的。
如果你的数据本身应该被加密,那么你想要处理盐的生成,在 server-side.
上加密对于密码,您需要对它们进行散列而不是加密。 de-crypt 密码永远不应该有任何理由。您可以随时散列提供的密码并比较散列值。
只需使用https,所有数据和查询字符串均已加密。添加证书固定,甚至可以减轻 MITM 攻击。你的加密也不会更好。
如果您决定自己加密,请使用 RNCryptor。不熟悉密码学的人几乎不可能获得正确的安全性。
在服务器上不保存密码,运行它通过PBKDF2加盐并保存盐、迭代计数和散列密码。