一、C#版AES加解密算法

  1. public class AESCode
  2. {
  3. public string Key { get; set; }
  4.  
  5. public string Encrypt(string val)
  6. {
  7. if (string.IsNullOrEmpty(val))
  8. return null;
  9. #if CSP
  10. using (AesCryptoServiceProvider des = new AesCryptoServiceProvider())
  11. #else
  12. using (AesManaged des = new AesManaged())
  13. #endif
  14. {
  15. byte[] inputByteArray = Encoding.UTF8.GetBytes(val);
  16. byte[] _key;
  17. byte[] _iv;
  18. GeneralKeyIV(this.Key, out _key, out _iv);
  19. des.Key = _key;
  20. des.IV = _iv;
  21. using (MemoryStream ms = new MemoryStream())
  22. {
  23. using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
  24. {
  25. cs.Write(inputByteArray, , inputByteArray.Length);
  26. cs.FlushFinalBlock();
  27. byte[] bytes = (byte[])ms.ToArray();
  28. return Convert.ToBase64String(bytes);
  29. }
  30. }
  31. }
  32. }
  33.  
  34. public string Decrypt(string val)
  35. {
  36. if (string.IsNullOrEmpty(val))
  37. return null;
  38. #if CSP
  39. using (AesCryptoServiceProvider des = new AesCryptoServiceProvider())
  40. #else
  41. using (AesManaged des = new AesManaged())
  42. #endif
  43. {
  44. byte[] inputByteArray = Convert.FromBase64String(val);
  45. byte[] _key;
  46. byte[] _iv;
  47. GeneralKeyIV(this.Key, out _key, out _iv);
  48. des.Key = _key;
  49. des.IV = _iv;
  50. using (MemoryStream ms = new MemoryStream())
  51. {
  52. using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
  53. {
  54. cs.Write(inputByteArray, , inputByteArray.Length);
  55. cs.FlushFinalBlock();
  56. return Encoding.UTF8.GetString(ms.ToArray());
  57. }
  58. }
  59. }
  60. }
  61.  
  62. public void GeneralKeyIV(string keyStr, out byte[] key, out byte[] iv)
  63. {
  64. byte[] bytes = Encoding.UTF8.GetBytes(keyStr);
  65. key = SHA256Managed.Create().ComputeHash(bytes);
  66. iv = MD5.Create().ComputeHash(bytes);
  67. }
  68. }

二、Java版算法

  1. import java.security.MessageDigest;
  2. import javax.crypto.Cipher;
  3. import javax.crypto.spec.IvParameterSpec;
  4. import javax.crypto.spec.SecretKeySpec;
  5.  
  6. import org.apache.commons.codec.binary.Base64;
  7.  
  8. public class AESCode {
  9. /**
  10. * 提供密钥和向量进行加密
  11. *
  12. * @param sSrc
  13. * @param key
  14. * @param iv
  15. * @return
  16. * @throws Exception
  17. */
  18. public static String Encrypt(String sSrc, byte[] key, byte[] iv) throws Exception {
  19. SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
  20. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/补码方式"
  21. IvParameterSpec _iv = new IvParameterSpec(iv);// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
  22. cipher.init(Cipher.ENCRYPT_MODE, skeySpec, _iv);
  23. byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
  24. return Base64.encodeBase64String(encrypted);
  25. }
  26.  
  27. /**
  28. * 提供密钥和向量进行解密
  29. *
  30. * @param sSrc
  31. * @param key
  32. * @param iv
  33. * @return
  34. * @throws Exception
  35. */
  36. public static String Decrypt(String sSrc, byte[] key, byte[] iv) throws Exception {
  37. SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
  38. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  39. IvParameterSpec _iv = new IvParameterSpec(iv);
  40. cipher.init(Cipher.DECRYPT_MODE, skeySpec, _iv);
  41. byte[] encrypted = Base64.decodeBase64(sSrc);
  42. byte[] original = cipher.doFinal(encrypted);
  43. return new String(original, "utf-8");
  44. }
  45.  
  46. /**
  47. * 使用密钥进行加密
  48. *
  49. * @param sSrc
  50. * @param keyStr
  51. * @return
  52. * @throws Exception
  53. */
  54. public static String Encrypt(String sSrc, String keyStr) throws Exception {
  55. byte[] key = GeneralKey(keyStr);
  56. byte[] iv = GeneralIv(keyStr);
  57. SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
  58. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/补码方式"
  59. IvParameterSpec _iv = new IvParameterSpec(iv);
  60. cipher.init(Cipher.ENCRYPT_MODE, skeySpec, _iv);
  61. byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
  62. return Base64.encodeBase64String(encrypted);
  63. }
  64.  
  65. /**
  66. * 使用密钥进行解密
  67. *
  68. * @param sSrc
  69. * @param keyStr
  70. * @return
  71. * @throws Exception
  72. */
  73. public static String Decrypt(String sSrc, String keyStr) throws Exception {
  74. byte[] key = GeneralKey(keyStr);
  75. byte[] iv = GeneralIv(keyStr);
  76. SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
  77. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  78. IvParameterSpec _iv = new IvParameterSpec(iv);
  79. cipher.init(Cipher.DECRYPT_MODE, skeySpec, _iv);
  80. byte[] encrypted = Base64.decodeBase64(sSrc);// 先用base64解码
  81. byte[] original = cipher.doFinal(encrypted);
  82. return new String(original, "utf-8");
  83. }
  84.  
  85. /**
  86. * 构建密钥字节码
  87. *
  88. * @param keyStr
  89. * @return
  90. * @throws Exception
  91. */
  92. private static byte[] GeneralKey(String keyStr) throws Exception {
  93. byte[] bytes = keyStr.getBytes("utf-8");
  94. MessageDigest md = MessageDigest.getInstance("SHA-256");
  95. md.update(bytes);
  96. return md.digest();
  97. }
  98.  
  99. /**
  100. * 构建加解密向量字节码
  101. *
  102. * @param keyStr
  103. * @return
  104. * @throws Exception
  105. */
  106. private static byte[] GeneralIv(String keyStr) throws Exception {
  107. byte[] bytes = keyStr.getBytes("utf-8");
  108. MessageDigest md = MessageDigest.getInstance("MD5");
  109. md.update(bytes);
  110. return md.digest();
  111. }
  112. }

java版需要commons-codec-1.10.jar,local_policy.jar,US_export_policy.jar

C#与java中的AES加解密互解算法的更多相关文章

  1. Java中的AES加解密工具类:AESUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...

  2. Java中的AES加解密

    直接上代码,Base64使用的是Java8的方法,如没有,替换即可 KEY:即密码 IV:即偏移量,可自订,十六位 加密方式:AES/CBC/PKCS5Padding,128位加密 如果想用256位和 ...

  3. .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转

    .net mvc 站点自带简易SSL加密传输   因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...

  4. java学习-AES加解密之AES-128-CBC算法

    AES算法简介 AES是一种对称加密算法,或称分组对称加密算法.  是Advanced Encryption Standard高级加密标准,简称AES AES的基本要求是,采用对称分组密码体制.分组密 ...

  5. Java中的RSA加解密工具类:RSAUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.utils.log.LogUtils; ...

  6. React中的AES加解密请求

    引言 在我们使用React开发Web前端的时候,如果是比较大的项目和正常的项目的话,我们必然会用到加解密,之前的文章中提到.NET的一些加解密,那么,这里我就模拟一个例子: 1.后台开发API接口,但 ...

  7. java中几种加/解密API

    如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorit ...

  8. JAVA中使用AES加密解密

    技术交流群: 233513714 /** * AES加密测试 * * @param str 加密参数 */ public void aesTest(String str) { log.info(&qu ...

  9. CryptoJS与C#AES加解密互转

    CryptoJS下载地址: https://code.google.com/archive/p/crypto-js/downloads http://download.csdn.net/detail/ ...

随机推荐

  1. 【learning】 扩展lucas定理

    首先说下啥是lucas定理: $\binom n m \equiv \binom {n\%P} {m\%P} \times \binom{n/P}{m/P} \pmod P$ 借助这个定理,求$\bi ...

  2. (转)python通过paramiko实现,ssh功能

    python通过paramiko实现,ssh功能 1 import paramiko 2 3 ssh =paramiko.SSHClient()#创建一个SSH连接对象 4 ssh.set_missi ...

  3. ubuntu安转QTcreator出现The default mkspec symlink is broken

    QT Creator安装:https://blog.csdn.net/arackethis/article/details/42326967 QT SDK安装:https://blog.csdn.ne ...

  4. Javascript图片预加载详解 分类: JavaScript HTML+CSS 2015-05-29 11:01 768人阅读 评论(0) 收藏

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  5. 如何查看第三方apk的信息

    很多时候,我们需要获取别人的apk的信息.但是我们看不到apk的代码,对于apk的信息并没有直接的方法获取.那么,我们要怎么获取apk信息呢? 这里,我整理了两个方法,亲测可用. 第一种,直接使用An ...

  6. 如何在Notepad++里正确设置java环境(图文环境)

    不多说,直接上干货! 这款软件非常好用!!! Notepad++软件的下载与安装步骤(图文详解) 欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智能躺过的坑       同时,大家可 ...

  7. 【转】linux sar命令详解

    原文地址:http://lovesoo.org/linux-sar-command-detailed.html sar(System Activity Reporter系统活动情况报告)是目前 Lin ...

  8. TensorFlow的梯度裁剪

    在较深的网络,如多层CNN或者非常长的RNN,由于求导的链式法则,有可能会出现梯度消失(Gradient Vanishing)或梯度爆炸(Gradient Exploding )的问题. 原理 问题: ...

  9. PHP MYSQL登陆和模糊查询

    PHP MYSQL登陆和模糊查询   PHP版本 5.5.12    MYSQL版本 5.6.17  Apache 2.4.9 用的wampserver 一.PHPMYSQL实现登陆:  一共含有两个 ...

  10. SSM整合(1): spring 与 springmvc 整合

    久没有写博客了, 今年事情太多了, 也没了心思. 去深圳出差,  更重要的结婚的事情, 一茬接一茬. 好在最近闲暇一些, 就想记录一些曾经困扰过我的问题(现在用spring boot真是太方便了, 很 ...