java、C#配套版AES加密

java版加密

  1. public static String aesEncrypt(String str, String key) throws Exception {
  2. if (str == null || key == null) return null;
  3. Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
  4. cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(Md5Utils.ShortMd5(key).getBytes("UTF-8"), "AES"));
  5. byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
  6. return new BASE64Encoder().encode(bytes);
  7. }

java版解密

  1. public static String aesDecrypt(String str, String key) throws Exception {
  2. if (str == null || key == null) return null;
  3. Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
  4. cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(Md5Utils.ShortMd5(key).getBytes("UTF-8"), "AES"));
  5. byte[] bytes = new BASE64Decoder().decodeBuffer(str);
  6. bytes = cipher.doFinal(bytes);
  7. return new String(bytes, "utf-8");
  8. }

C#版加密

  1. public static string Encrypt(string toEncrypt,string key)
  2. {
  3. // 256-AES key
  4. //byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
  5. byte[] keyArray = Encoding.UTF8.GetBytes(Get16ByteMd5(key));
  6. byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
  7. RijndaelManaged rDel = new RijndaelManaged();
  8. rDel.Key = keyArray;
  9. rDel.Mode = CipherMode.ECB;
  10. rDel.Padding = PaddingMode.PKCS7;
  11. ICryptoTransform cTransform = rDel.CreateEncryptor();
  12. byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
  13. return Convert.ToBase64String(resultArray, 0, resultArray.Length);
  14. }

C#版解密

  1. public static string Decrypt(string toDecrypt,string key)
  2. {
  3. // 256-AES key
  4. //byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
  5. byte[] keyArray = Encoding.UTF8.GetBytes(Get16ByteMd5(key));
  6. byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
  7. RijndaelManaged rDel = new RijndaelManaged();
  8. rDel.Key = keyArray;
  9. rDel.Mode = CipherMode.ECB;
  10. rDel.Padding = PaddingMode.PKCS7;
  11. //rDel.IV = IV;
  12. ICryptoTransform cTransform = rDel.CreateDecryptor();
  13. byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
  14. return UTF8Encoding.UTF8.GetString(resultArray);
  15. }

java版用到的代码:

  1. public static String ShortMd5(String sourceStr)
  2. {
  3. String result = "";
  4. try
  5. {
  6. MessageDigest md = MessageDigest.getInstance("MD5");
  7. md.update(sourceStr.getBytes());
  8. byte b[] = md.digest();
  9. int i;
  10. StringBuffer buf = new StringBuffer("");
  11. for (int offset = 0; offset < b.length; offset++)
  12. {
  13. i = b[offset];
  14. if (i < 0)
  15. i += 256;
  16. if (i < 16)
  17. buf.append("0");
  18. buf.append(Integer.toHexString(i));
  19. }
  20. result = buf.toString().substring(8, 24);
  21. }
  22. catch (NoSuchAlgorithmException e)
  23. {
  24. System.out.println(e);
  25. }
  26. return result.toUpperCase();
  27. }

C#版用到的代码:

  1. public static string Get16ByteMd5(string ConvertString)
  2. {
  3. MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
  4. string t2 = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(ConvertString)), 4, 8);
  5. t2 = t2.Replace("-", "");
  6. return t2.ToUpper();
  7. }

来自为知笔记(Wiz)

时间: 2024-10-30 13:50:03

java、C#配套版AES加密的相关文章

Java 环境下使用 AES 加密的特殊问题处理

在 Java 环境下使用 AES 加密,在密钥长度和字节填充方面有一些比较特殊的处理. 1. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥的时候,会报告密钥长度错误 Invalid AES key length 你需要下载一个支持更长密钥的包.这个包叫做 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6,可以从这里下载,下载地址:http://www.

android开发 java与c# 兼容AES加密

由于android客户端采用的是AES加密,服务器用的是asp.net(c#),所以就造成了不一致的加密与解密问题,下面就贴出代码,已经试验过. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Security.Cryptography; using System.IO; namespac

android客户端和java服务端用aes加密

最近在公司做一个项目,老大让我们实现加解密的方法,我把工作直接推给了java服务端,他们也是直接在网上copy的代码,说我直接放到我的android代码中就可以了,不需要太多的更改.我就照做了,但是在真正的测试的时候,发现两边输入的密码一致,但是加密结果不一致.这可折磨我们了好久,最终解决了这个问题,加以记录. android和java加密结果不一样的原因,是因为他们的默认随机数序列不一致,所以解决他的办法是,不要使用默认的创建方法. 以下是正确的代码.android和java端的代码是一致的.

AES加密解密通用版Object-C / C# / JAVA

1.无向量 128位 /// <summary> /// AES加密(无向量) /// </summary> /// <param name="plainBytes">被加密的明文</param> /// <param name="key">密钥</param> /// <returns>密文</returns> public static string AESEncry

AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】

先简单从百度找来介绍: ? 1 2 3 4 5 6     密码学中的高级加密标准(Advanced Encryption Standard,AES),又称高级加密标准Rijndael加密法, 是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界 所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日 发布于FIPS PUB197,并在2002年5月26日成为有效的标准.2006年,高级加密标准已然成为对

[转]AES加密遇到的问题

Java 环境下使用 AES 加密的特殊问题处理 在 Java 环境下使用 AES 加密,在密钥长度和字节填充方面有一些比较特殊的处理. 1. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥的时候,会报告密钥长度错误 Invalid AES key length 你需要下载一个支持更长密钥的包.这个包叫做 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6

Java aes加密C#解密的取巧方法

摘要: 项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦.Java的代码和C#的代码无法互通. Java代码: /** * 加密 * * @param content 需要加密的内... 项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦.Java的代码和C#的代码无法互通. Java代码: /**

OC与JAVA通用的AES加密解密

最近项目中用到AES加密,但在网上找了很多的库都是OC与JAVA加密后不能项目解密,因为我们的服务器是用java写的,所以不能通用对于做iOS的就是个大麻烦,Android就比较悠哉用java写所以没什么事.不过,在把度娘全身搜遍后,还是让我找到了这个库,出处记不清了,之前找了好多好多的库.下面记录下使用方法. 例子:http://pan.baidu.com/s/1dDktRPn OC调用方法: // // ViewController.m // AESTest // // Created by

Java利用 DES / 3DES / AES 这三种算法分别实现 对称加密

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了. 2)编程就是算法和数据结构,算法和数据结构是编程的灵魂. 注意,这可不是我说的,是无数程序员总结的,话说的很实在也很精辟,若想长久可持续发展,多研究算法还是很有必要的,今天我给大家说说加密算法中的对称加密算法,并且这里将教会大家对称加密算法的编程使用.包含