c#对接java aes加密后的值不一样
我要封装类 2018-03-30 02:43:23 java代码中的秘钥经过md5加密为32位;
应该是AES-256-ECB
但加密后的字符串就是对不上
求大神解答
java代码
package com.zct.demo.util;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* Created by yepei.ye on 2016/4/1.
* Description:
*/
public class AESUtil {
private static final Logger logger = LoggerFactory.getLogger(AESUtil.class);
private static final String defaultCharset = "UTF-8";
private static final String KEY_AES = "AES";
private static final String KEY_MD5 = "MD5";
private static MessageDigest md5Digest;
static {
try {
md5Digest = MessageDigest.getInstance(KEY_MD5);
} catch (NoSuchAlgorithmException e) {
//
}
}
/**
* 加密
*
* @param data 需要加密的内容
* @param key 加密密码
* @return
*/
public static String encrypt(String data, String key) {
return doAES(data, key, Cipher.ENCRYPT_MODE);
}
/**
* 解密
*
* @param data 待解密内容
* @param key 解密密钥
* @return
*/
public static String decrypt(String data, String key) {
return doAES(data, key, Cipher.DECRYPT_MODE);
}
/**
* 加解密
*
* @param data
* @param key
* @param mode
* @return
*/
private static String doAES(String data, String key, int mode) {
try {
if (StringUtils.isBlank(data) || StringUtils.isBlank(key)) {
return null;
}
boolean encrypt = mode == Cipher.ENCRYPT_MODE;
byte[] content;
if (encrypt) {
content = data.getBytes(defaultCharset);
} else {
content = Base64.decodeBase64(data);
}
SecretKeySpec keySpec = new SecretKeySpec(md5Digest.digest(key.getBytes(defaultCharset)), KEY_AES);
Cipher cipher = Cipher.getInstance(KEY_AES);// 创建密码器
cipher.init(mode, keySpec);// 初始化
byte[] result = cipher.doFinal(content);
if (encrypt) {
return Base64.encodeBase64String(result);
} else {
return new String(result, defaultCharset);
}
} catch (Exception e) {
logger.error("AES密文处理异常", e);
}
return null;
}
}
测试
public static void main(String[] args) throws Exception {
String key = "qunar2016";
String data = "test data";
String encrypted = AESUtil.encrypt(data, key);
String decrypted = AESUtil.decrypt(encrypted, key);
System.out.println("加密后的密文:\n" + encrypted);
System.out.println("解密后的报文:\n" + decrypted);
}
key md5加密后为 9DA00548D3110D55FFC0CFE29BA78E38
加密后的字符串 5z9jULhAFNAI030GSvwmQw==
我加密后的 uorcTcWkv5QNpDjS9QbA/w==