Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AES 256的盐尺寸和位置是多少?_C#_Cryptography_Aes_Salt - Fatal编程技术网

C# AES 256的盐尺寸和位置是多少?

C# AES 256的盐尺寸和位置是多少?,c#,cryptography,aes,salt,C#,Cryptography,Aes,Salt,有段时间没写加密了,忘了一些东西 我记得,为了让使用相同键的相同数据的输出不同,我想在字节数组的一端对数据进行salt,然后使用CBC模式,这样salt就可以完成它的任务 但是我记不起加密的方向了,是盐在0位置,然后要加密的数据在后面,还是盐在最后?我知道当盐是链中的第一块时,CBC模式最有效 AES 256的块大小也是多少?wiki文章说,所有AES都使用128位块大小,256位部分仅与密钥长度有关。那么AES 256的salt应该是16字节还是32字节 我使用的是AES CryptoServ

有段时间没写加密了,忘了一些东西

我记得,为了让使用相同键的相同数据的输出不同,我想在字节数组的一端对数据进行salt,然后使用CBC模式,这样salt就可以完成它的任务

但是我记不起加密的方向了,是盐在0位置,然后要加密的数据在后面,还是盐在最后?我知道当盐是链中的第一块时,CBC模式最有效

AES 256的块大小也是多少?wiki文章说,所有AES都使用128位块大小,256位部分仅与密钥长度有关。那么AES 256的salt应该是16字节还是32字节


我使用的是AES CryptoServiceProvider,而不是RijndaelManaged。

首先,在块密码的上下文中,我们通常称为随机每加密值初始化向量(IV),而不是salt

AES-256有128位块,因此IV应该有128位。实现CBC模式的典型库对IV有一个特殊的参数。您不应该自己将其混合到纯文本中

AESCryptServiceProvider
在实例化时默认创建一个新的随机IV。您只需要将其与密文一起存储,并在解密之前将其还原。因为你需要IV来开始解密,我更喜欢把它放在密文的开头。但是如何以及在何处储存静脉注射对安全性没有影响



除了您的问题之外,还有一个提示:在密文上添加MAC(例如HMAC-SHA-2)。一定要在密文上计算它,包括IV(加密然后mac),而不是明文(mac然后加密)。否则,主动攻击者通常可以使用填充oracle对消息进行解密。不要忘记使用恒定时间比较函数进行MAC验证。

首先,在分组密码的上下文中,我们通常称为随机每加密值初始化向量(IV),而不是salt

AES-256有128位块,因此IV应该有128位。实现CBC模式的典型库对IV有一个特殊的参数。您不应该自己将其混合到纯文本中

AESCryptServiceProvider
在实例化时默认创建一个新的随机IV。您只需要将其与密文一起存储,并在解密之前将其还原。因为你需要IV来开始解密,我更喜欢把它放在密文的开头。但是如何以及在何处储存静脉注射对安全性没有影响



除了您的问题之外,还有一个提示:在密文上添加MAC(例如HMAC-SHA-2)。一定要在密文上计算它,包括IV(加密然后mac),而不是明文(mac然后加密)。否则,主动攻击者通常可以使用填充oracle对消息进行解密。不要忘记使用恒定时间比较函数进行MAC验证。

Hi CodesInChaos,我需要知道IV才能解密吗?我从来没有真正使用过它,因为我从来没有真正理解过它,我一直认为你需要知道IV才能解密。@AndrewHoffman 1)你需要知道IV才能解密第一个块。但它不会影响以后块的解密。(对于CBC,其他模式有所不同)。2) 标准做法是将IV与密文一起以普通格式存储。静脉注射不是秘密。哦,我明白了。我使用它的目的是对一些数据进行加密,并将其发送到web,而不知道它要去哪里,然后在以后的某个时候将加密的数据取回。我没有进行会话,也没有存储数据或IV。我打算salt的目的只是确保即使数据和密钥相同,包也不同。我模模糊糊地开始记得为什么我以前从未用过静脉注射。。好久没这么做了。所以当在AES 256中用salt代替IV时,salt应该是16字节,并且应该是在开头?“加密/解密.NET中的字符串”是一个很好的起点。@NullUserException Yes,例如。IV影响每个块的加密,但只影响第一个块的解密。嗨,CodesInChaos,我需要知道IV才能解密吗?我从来没有真正使用过它,因为我从来没有真正理解过它,我一直认为你需要知道IV才能解密。@AndrewHoffman 1)你需要知道IV才能解密第一个块。但它不会影响以后块的解密。(对于CBC,其他模式有所不同)。2) 标准做法是将IV与密文一起以普通格式存储。静脉注射不是秘密。哦,我明白了。我使用它的目的是对一些数据进行加密,并将其发送到web,而不知道它要去哪里,然后在以后的某个时候将加密的数据取回。我没有进行会话,也没有存储数据或IV。我打算salt的目的只是确保即使数据和密钥相同,包也不同。我模模糊糊地开始记得为什么我以前从未用过静脉注射。。好久没这么做了。所以当在AES 256中用salt代替IV时,salt应该是16字节,并且应该是在开头?“加密/解密.NET中的字符串”是一个很好的起点。@NullUserException Yes,例如。IV影响每个块的加密,但只影响第一个块的解密。