手上有一人项目,是用手机端访问网站(只能手机访问),并将网站当前页面的所有HMTL标签传送给后台,后台采用的是.NET;在.NET端都是以GET页面公开地址的方式访问,但在URL内传送HTML标签会报错,所以采用在JAVA端将获取到的内容用DES加密,然后再到.NET解密,但现在出现一个问题,JAVA端加后在.NET端解密码不成功。不懂的JAVA的代码,
java端代码:
public static final String SREDES="DES";
public static final String KEYDES="comDDDDXXX";
/**
* Description 根据键值进行加密
* @param data
* @param key
* 加密键byte数组
* @return
* @throws Exception
*/
public static String encrypt(String data, String key) throws Exception {
byte[] bt = encrypt(data.getBytes(), key.getBytes());
String strs = Base64.encode(bt);
return strs;
}
private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
// 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key);
// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(SREDES);
SecretKey securekey = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance(SREDES);
// 用密钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
return cipher.doFinal(data);
}
在.NET内需要先定一个向量IV,然后再给一个加密码的KEY,再根据这两个对内容进行加密,以上的代码中,如何分析那个能跟IV对应。求JAVA大神帮忙分析分析
另外各位是否有过JAVA加密,.NET解密的源码,给否给个参考,先谢过啦
encrypt的处理流程:
1)使用DES加密
2)使用Base64编码
你要解密就反其道而行之:
1)使用Base64解码
2)然后使用DES算法解密。
下面是Java使用DES加密、解密的过程。
public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding"; /** * DES算法,加密 * * @param data 待加密字符串 * @param key 加密私钥,长度不能够小于8位 * @return 加密后的字节数组,一般结合Base64编码使用 * @throws InvalidAlgorithmParameterException * @throws Exception */ public static String encode(String key,String data) { if(data == null) return null; try{ DESKeySpec dks = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); //key的长度不能够小于8位字节 Key secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(ALGORITHM_DES); IvParameterSpec iv = new IvParameterSpec("12345678".getBytes()); AlgorithmParameterSpec paramSpec = iv; cipher.init(Cipher.ENCRYPT_MODE, secretKey,paramSpec); byte[] bytes = cipher.doFinal(data.getBytes()); return byte2hex(bytes); }catch(Exception e){ e.printStackTrace(); return data; } } /** * DES算法,解密 * * @param data 待解密字符串 * @param key 解密私钥,长度不能够小于8位 * @return 解密后的字节数组 * @throws Exception 异常 */ public static String decode(String key,String data) { if(data == null) return null; try { DESKeySpec dks = new DESKeySpec(key.getBytes()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); //key的长度不能够小于8位字节 Key secretKey = keyFactory.generateSecret(dks); Cipher cipher = Cipher.getInstance(ALGORITHM_DES); IvParameterSpec iv = new IvParameterSpec("12345678".getBytes()); AlgorithmParameterSpec paramSpec = iv; cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec); return new String(cipher.doFinal(hex2byte(data.getBytes()))); } catch (Exception e){ e.printStackTrace(); return data; } }
对于使用Base64解码的过程,.net肯定有现成的API,
对于DES解密的过程,你只需要参考这个例子,转换成使用.net相关API就可以了
base64编码了,先base64解码 然后des解密