因为我们在.net 平台上加密过的密文需要发送到其它平台(如jsp),所以我必须使用一种和其它平台通用的加密解密算法。用DESCryptoServiceProvider进行加密和解密时,需要用到两个参数:密钥和初始化向量。但是在java平台上的加密解密只有到了密钥这一个参数。在C#中用 DESCryptoServiceProvider 类进行加密生成的密文,能够用java等其它平台工具解密吗?
或者用.Net中其它的加密算法生成的密文能够被java平台解密?

解决方案 »

  1.   

    感觉这是算法的问题,根具体使用的语言无关就像你用c#读写的文件,你用java同样可以读写。
      

  2.   

    大概看一下加密理论吧,简单的msdn就有。打个比方,加密时所有字节加一 boy 变成了 cpz,不认识了吧?解密时再减一,所以和语言平台都无关的。
      

  3.   

    大家别光说不练啊,我急于想知道怎么解决这个问题。首先比要求比较高的加密是必需的,因为我们的数据要跟钱打交道,并且用户数量比较大。我想DES加密应该是国际上通用的算法,所以用 .Net 上加密的密文应该可以被其它平台解密。但是如果 MS .Net 把这种加密和解密的算法作了改进并且没有公布,则java就无法解密了。比如在 .Net 里封装的加密算法中,它用到了两个参数:密钥和初始化向量,而在java中则只需要用到一个参数:密钥,这让我无法把这两种方法想到一块来!
      

  4.   

    帖上C#中的加密代码:string text = "这是要加密的内容。";
    byte[] source = System.Text.Encoding.Unicode.GetBytes(text);

    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    des.Key = this.key;
    des.IV = this.iv;

    ICryptoTransform desencrypt = des.CreateEncryptor();
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    CryptoStream cryptostream = new CryptoStream(ms,desencrypt,CryptoStreamMode.Write);cryptostream.Write(source, 0, source.Length);byte[] result = ms.ToArray();
    cryptostream.Close();
    ms.Close();

    FileStream fs = File.Open("E:\\java.txt", FileMode.Create, FileAccess.Write);
    fs.Write(result, 0, result.Length);
    fs.Close();
      

  5.   

    现在的问题是,在.net 中的这种加密方法,需要用到两个参数:密钥和初始化向量;而在java 的加密和解密中,只能提供一个参数:密钥。所以在java平台上没办法解密!这才是麻烦的地方。