首页新闻找找看学习计划

java DES加密 .net解密

0
悬赏园豆:10 [已解决问题] 解决于 2015-06-15 09:41

手上有一人项目,是用手机端访问网站(只能手机访问),并将网站当前页面的所有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解密的源码,给否给个参考,先谢过啦

beggar_的主页 beggar_ | 初学一级 | 园豆:23
提问于:2015-06-01 14:55
< >
分享
最佳答案
0

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就可以了

 

 

收获园豆:10
乐享程序员 | 小虾三级 |园豆:930 | 2015-06-06 08:27
其他回答(1)
0

base64编码了,先base64解码 然后des解密

Moulton | 园豆:206 (菜鸟二级) | 2015-06-01 18:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册