在下试做了一个加密解密的例子,用的是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==
请指教。

解决方案 »

  1.   

    还有,就是这些编码方式,比如说base64,ascii了什么的,到底是怎么一回事?能给点资料看看吗?
      

  2.   

    base-64是一种字符串的编码方式,楼主的
    "winform里是先用toBase64String方法放到textbox里,然后再用Encoding.ASCII.GetBytes()取出"
    这步就已经把你的输入数据给搞乱了,加密解密都不用去做这步
    另外提醒楼主,注意加密解密的时候数据byte要是一样的
    比如同样两个byte[],"123456null"和"123456"
    这个在显示出来的时候应该是一样的,但是加密以后的结果就不同了
    如果你把"123456null"用byte[6]解密出来,肯定就不正确
      

  3.   

    我也遇到过类似的问题,奇怪就奇怪在在同一个函数体内加密解密在控制台还是Winform都没有问题,而不在同一个函数内则加密可以,解密就出错。不知道咋回事。