我使用以下代码初始化加密...
Dim symmetricKey As New System.Security.Cryptography.RijndaelManaged()
With symmetricKey
.Key = Encoding.ASCII.GetBytes(Key)
.IV = Encoding.ASCII.GetBytes(IV)
.Mode = CipherMode.CBC
.BlockSize = 128
.KeySize = 128
.Padding = PaddingMode.PKCS7
End With
要求是使用PKCS5。 vb.net中的填充模式仅包括
所以我认为没有PKCS5的方法。有没有办法添加它,还是我需要自己编写加密方法?如果是这样 - 我该怎么写呢?是否有可靠的DLL支持它?
答案 0 :(得分:6)
PKCS7填充和PKCS5填充是一回事。在这种情况下,它们是同义词。
编辑:
PKCS#7填充在第10.3节PKCS#7 spec中描述。 PKCS#5填充在第6.1.1节第4步中的PKCS#5 spec中描述。通过检查可以看出,填充算法是相同的。
答案 1 :(得分:2)
我想你需要别人来阅读你的加密数据,然后才能理解那种填充。
您可能知道,PKCS5解释为:
PKCS#5填充的工作原理如下:为块填充剩余的字节分配一个数字,这是为填充块而添加的字节数。例如,如果我们有一个16字节的块,并且只填充了11个字节,那么我们有5个字节来填充。对于5个字节的填充,这5个字节都被赋值为“5”。
嗯,你有你的信息 - 将字符串编码为byte [],扩展它以使其与16个字节对齐,并根据配方填充其余部分。然后,使用Padding.None加密。
猜猜它不应该那么麻烦。无论如何,没有字符串加密,所以无论如何你将这些东西编码为byte [],...
string message="lorem ipsum and stuff";
byte[] result=Text.Encode(message);
int packets=result.Length/16;
int paddingSize=16-(result.Length-(packets*16));
if (paddingSize!=16)
{
byte[] newbuffer=new byte[result.Length+paddingSize];
packets.CopyTo(newbuffer);
for (int n=result.Length;n<newbuffer.Length;n++)
{
newbuffer[n]=16-paddingsize;
}
}
// then, encrypt result or newbuffer, depending on if padding is 16 or not
注意:代码不在我的脑海中,根本不可运行......