Java Des加解密方法(c#加密Java解密)
最近我们用Java把一个用.net编写的老系统重新做了翻版,但是登录还是用.net的登录。这样就会遇到一个比较棘手的问题,我们登录用的cookie信息都是.net用des加密的,但我们不得不用Java解密。我在网上找了下很多关于Java DES加解密的信息,大体有两种:一种是有向量的加解密,一种是没有向量只有秘钥的加解密。C#的DES加密是有向量的,所以我必须得用第一种。这时或许你还会遇到一个不是问题的问题:Java DES加解密的向量必须是8位,而C#可能是十六位,但是这是无关紧要的,因为在Java DES加解密的时候你只需要用C#使用向量的前八位就行了。以下是Java DES加解密的源代码(亲自做过验证):
public class DESCryption { // DES加密的私钥,必须是8位长的字符串 private static final byte[] DESkey = { 6, 120, 10, 5, 7, 50, 8, 25, 6, 120, 10, 5, 7, 50, 8, 25 };// 设置密钥、 private static final byte[] DESIV = { 0x12, 0x34, 0x56, 0x78, (byte) 0x90, (byte) 0xAB, (byte) 0xCD, (byte) 0xAF};// 设置向量 private static AlgorithmParameterSpec iv = null;// 加密算法的参数接口,IvParameterSpec是它的一个实现 private static Key key = null; public DESCryption(byte[] DESkey,byte[] DESIV) throws Exception { DESKeySpec keySpec = new DESKeySpec(DESkey);// 设置密钥参数 iv = new IvParameterSpec(DESIV);// 设置向量 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 获得密钥工厂 key = keyFactory.generateSecret(keySpec);// 得到密钥对象 } //加密方法 public String encode(String data) throws Exception { Cipher enCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");// 得到加密对象Cipher enCipher.init(Cipher.ENCRYPT_MODE, key, iv);// 设置工作模式为加密模式,给出密钥和向量 byte[] pasByte = enCipher.doFinal(data.getBytes("utf-8")); BASE64Encoder base64Encoder = new BASE64Encoder(); return base64Encoder.encode(pasByte); } //解密方法 public String decode(String data) throws Exception { Cipher deCipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); deCipher.init(Cipher.DECRYPT_MODE, key, iv); BASE64Decoder base64Decoder = new BASE64Decoder(); byte[] pasByte = deCipher.doFinal(base64Decoder.decodeBuffer(data)); return new String(pasByte, "UTF-8"); } //测试 public static void main(String[] args) throws Exception { DESCryption tools = new DESCryption(DESkey,DESIV); System.out.println("加密:" + tools.encode("管理员")); System.out.println("解密:" + tools.decode("T9YwLGYNbN0=")); } }
希望以上代码能够解决和我遇到同样问题的童鞋!