Servlets 使用AES256了解Salt的使用情况,并通过网络发送数据

Servlets 使用AES256了解Salt的使用情况,并通过网络发送数据,servlets,encryption,spring-security,aes,salt,Servlets,Encryption,Spring Security,Aes,Salt,我正在尝试加密NSString内容并将其发送到服务器 AES密钥,不应是简单的纯文本。 例如:“密码$5” 应该向其中添加一个salt,这样它就像随机数据+密码$5一样 此密钥将用于加密 因此,我将向服务器发送一个JSON,如下所示 { password:"Encrypted Password with AES256" } 现在,我的问题是密钥是随机的,因为salt是随机的,所以我应该如何解密AES256收到的加密字符串 虽然我知道钥匙(密码$5),但我不知道盐 我是否必须将salt发送到服

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

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

应该向其中添加一个salt,这样它就像随机数据+密码$5一样

此密钥将用于加密

因此,我将向服务器发送一个JSON,如下所示

{
 password:"Encrypted Password with AES256"
}
现在,我的问题是密钥是随机的,因为salt是随机的,所以我应该如何解密AES256收到的加密字符串

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

我是否必须将salt发送到服务器(最好放在哪个位置,应该放在头中还是响应本身),它安全吗

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

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

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

如果您需要对数据本身进行加密,那么您需要处理盐的生成,在服务器端进行加密


对于密码,您将希望对其进行散列,而不是加密。永远不应该有理由对密码进行解密。您始终可以对提供的密码进行散列并比较散列值。

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

如果您需要对数据本身进行加密,那么您需要处理盐的生成,在服务器端进行加密


对于密码,您将希望对其进行散列,而不是加密。永远不应该有理由对密码进行解密。您始终可以对提供的密码进行哈希运算并比较哈希值。

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

如果您决定自己进行加密,请使用。不精通密码学的人获得安全性的可能性很小


在服务器上,不要保存密码,使用salt通过PBKDF2运行密码,并保存salt、迭代计数和哈希密码。

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

如果您决定自己进行加密,请使用。不精通密码学的人获得安全性的可能性很小


在服务器上,不要保存密码,用salt通过PBKDF2运行它,并保存salt、迭代计数和散列密码。

哦,因此,如果使用HTTPS将用户密码发送到服务器,我不必担心使用AES256。这给我带来了另一个问题,为什么人们仍然使用AES256?这是正确的。为什么不再使用AES(高级加密标准),它是当前的对称加密标准。https使用AES(或其他密码)对数据进行加密。RNCryptor也不太可能正确:哦,所以如果使用https将用户密码发送到服务器,我就不必担心使用AES256。这给我带来了另一个问题,为什么人们仍然使用AES256?这是正确的。为什么不再使用AES(高级加密标准),它是当前的对称加密标准。https使用AES(或其他密码)对数据进行加密。RNCryptor也不太可能正确:所以,这是否意味着,我必须发送加密数据以及SALT,而不仅仅是加密数据。服务器将在您的应用程序代码得到它之前对其进行解密,然后您可以使用salt对其进行哈希并检查它,这意味着我可以在服务器和客户端使用不同的salt(长度相同,PBKDF2),但哈希结果将是相同的。不,一点也不。你需要每次的盐都是一样的。那么,这是否意味着,我必须发送加密数据以及盐不只是加密数据。服务器将在您的应用程序代码得到它之前对其进行解密,然后您可以使用salt对其进行哈希并检查它,这意味着我可以在服务器和客户端使用不同的salt(长度相同,PBKDF2),但哈希结果将是相同的。不,一点也不。你需要每次的盐都是一样的。