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==
...全文
1419 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
BXS_null 2018-04-09
  • 打赏
  • 举报
回复
之前我的也对不上,别人给的java代码,但是我项目是c#的,我用C#写出来的和他的java的对不上,不过只要你解密也是C#的就没事了吧
  • 打赏
  • 举报
回复
md5Digest.digest(key.getBytes(defaultCharset) java里面秘钥先转成的md5,即实际用的秘钥是传进去的秘钥Md5摘要后的byte[],你c#也要做这一步,现在只是字符串转成byte[]肯定不行
  • 打赏
  • 举报
回复
看不下去啊,这么长连加个染色都不加,太累人了
我要封装类 2018-03-30
  • 打赏
  • 举报
回复
大神 帮我看看我的代码 /// Md5 32位加密 /// </summary> /// <param name="ConvertString"></param> /// <returns></returns> public static string GetStrMd5(string ConvertString) { MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString))); t2 = t2.Replace("-", ""); return t2; } static string key= "qunar2016"; static void Main(string[] args) { key = GetStrMd5(key); string json = "test data"; string g= Encrypt(json, key); } /// <summary> /// AES加密 /// </summary> /// <param name="encryptStr">明文</param> /// <param name="key">密钥</param> /// <returns></returns> public static string Encrypt(string encryptStr, string key) { byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key); byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(encryptStr); RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = CipherMode.ECB; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length); }
我要封装类 2018-03-30
  • 打赏
  • 举报
回复
不能沉啊
  • 打赏
  • 举报
回复
AES以前对接过,没有问题,认真读代码,是不是一些编码等问题导致的,检查一下这些地方吧。 RSA就不要费劲了,对不上的

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧