在下试做了一个加密解密的例子,用的是des算法,参照的是这个例子:
http://www.microsoft.com/china/technet/security/guidance/secmod24.mspx
加密过程表面上都还正常(不敢肯定),但在解密时出了问题。同样的算法,在控制台程序里可以正常解密,但放到winform里就不可以。
查看了一下,好像是输入的密文不正确。感觉是编码不对,但是不知道如何解决。或者是其他问题?大致代码如下,详细的可以看上面微软的那个例子。
byte[] IV = null;
byte[] key = null;
byte[] cipherText = null;
byte[] plainText = null;
加密:
cipherText = enc.Encrypt(plainText,key);解密: try
{
//试图解密。
Decryptor dec = new Decryptor(algorithm);
dec.IV = IV;
// 继续并解密。
cipherText = Encoding.ASCII.GetBytes("1");
byte[] plainText = dec.Decrypt(cipherText, key);
// 查看您的纯文本。
Console.WriteLine("纯文本: " + Encoding.ASCII.GetString(plainText));
}控制台与winform程序不同的就是密文的获得方式。控制台里是直接用加密结果输入的,就是cipherText,winform里是先用toBase64String方法放到textbox里,然后再用Encoding.ASCII.GetBytes()取出。感觉就是这里出了问题。但是我把这个过程去掉,直接输入了密文之后还是不对。我用的数据是 plainText:1 ;key:11111111,IV: 1111111
用控制台加密的结果是 dcqJw5rvupY=,解密正常。
但是在winform里,如果先输出到textbox里,则提示数据不正确。
如果直接解密,结果就是 MQ==
请指教。
http://www.microsoft.com/china/technet/security/guidance/secmod24.mspx
加密过程表面上都还正常(不敢肯定),但在解密时出了问题。同样的算法,在控制台程序里可以正常解密,但放到winform里就不可以。
查看了一下,好像是输入的密文不正确。感觉是编码不对,但是不知道如何解决。或者是其他问题?大致代码如下,详细的可以看上面微软的那个例子。
byte[] IV = null;
byte[] key = null;
byte[] cipherText = null;
byte[] plainText = null;
加密:
cipherText = enc.Encrypt(plainText,key);解密: try
{
//试图解密。
Decryptor dec = new Decryptor(algorithm);
dec.IV = IV;
// 继续并解密。
cipherText = Encoding.ASCII.GetBytes("1");
byte[] plainText = dec.Decrypt(cipherText, key);
// 查看您的纯文本。
Console.WriteLine("纯文本: " + Encoding.ASCII.GetString(plainText));
}控制台与winform程序不同的就是密文的获得方式。控制台里是直接用加密结果输入的,就是cipherText,winform里是先用toBase64String方法放到textbox里,然后再用Encoding.ASCII.GetBytes()取出。感觉就是这里出了问题。但是我把这个过程去掉,直接输入了密文之后还是不对。我用的数据是 plainText:1 ;key:11111111,IV: 1111111
用控制台加密的结果是 dcqJw5rvupY=,解密正常。
但是在winform里,如果先输出到textbox里,则提示数据不正确。
如果直接解密,结果就是 MQ==
请指教。
"winform里是先用toBase64String方法放到textbox里,然后再用Encoding.ASCII.GetBytes()取出"
这步就已经把你的输入数据给搞乱了,加密解密都不用去做这步
另外提醒楼主,注意加密解密的时候数据byte要是一样的
比如同样两个byte[],"123456null"和"123456"
这个在显示出来的时候应该是一样的,但是加密以后的结果就不同了
如果你把"123456null"用byte[6]解密出来,肯定就不正确