同一种加密解密方式(AES),不同的语言实现,即java加密解密,C#加密解密


package gaoKe.bang.web.controller;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
/**
 * 高级加密标准(英语:Advanced Encryption Standard,缩写:AES);
 * 在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
 * @author bang
 * 
 */


public class AES {
   // 加密
   public static String Encrypt(String sSrc, String sKey) throws Exception {
       if (sKey == null) {
           return null;
       }
       // 判断Key是否为16位
       if (sKey.length() != 16) {
           return null;
       }
       byte[] raw = sKey.getBytes("utf-8");
       SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
       Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
       cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
       byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));


       return new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。
   }
 
   // 解密
   public static String Decrypt(String sSrc, String sKey) throws Exception {
       try {
           // 判断Key是否正确
           if (sKey == null) {
               return null;
           }
           // 判断Key是否为16位
           if (sKey.length() != 16) {
               return null;
           }
           byte[] raw = sKey.getBytes("utf-8");
           SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
           Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
           cipher.init(Cipher.DECRYPT_MODE, skeySpec);
           byte[] encrypted1 = new Base64().decode(sSrc);//先用base64解密
           try {
               byte[] original = cipher.doFinal(encrypted1);
               String originalString = new String(original,"utf-8");
               return originalString;
           } catch (Exception e) {
               System.out.println(e.toString());
               return null;
           }
       } catch (Exception ex) {
           System.out.println(ex.toString());
           return null;
       }
   }
 
   public static void main(String[] args) throws Exception {
       /*
        * 此处使用AES-128-ECB加密模式,key需要为16位。
        */
       String cKey = "1234567890123456";
       // 需要加密的字串
       String cSrc = "三峡高科移动后台服务程序";
       System.out.println("加密前的字串是:"+cSrc);
       
       // 加密
       String enString = AES.Encrypt(cSrc, cKey);
       System.out.println("加密后的字串是:" + enString);
 
       // 解密
       String DeString = AES.Decrypt(enString, cKey);
       System.out.println("解密后的字串是:" + DeString);
   }
}

[C#]代码:加密——解密

/// <summary>
      /// 有密码的AES加密 
      /// </summary>
      /// <param name="text">加密字符</param>
      /// <param name="password">加密的密码</param>
      /// <param name="iv">密钥</param>
      /// <returns></returns>
      public static string Encrypt(string toEncrypt,string key)
      {
          byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
          byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);

          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);
      }

      /// <summary>
      /// AES解密
      /// </summary>
      /// <param name="text"></param>
      /// <param name="password"></param>
      /// <param name="iv"></param>
      /// <returns></returns>
      public static string Decrypt(string toDecrypt,string key)
      {
          byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
          byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);

          RijndaelManaged rDel = new RijndaelManaged();
          rDel.Key = keyArray;
          rDel.Mode = CipherMode.ECB;
          rDel.Padding = PaddingMode.PKCS7;

          ICryptoTransform cTransform = rDel.CreateDecryptor();
          byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

          return UTF8Encoding.UTF8.GetString(resultArray);

      }

如果你看到了这里,觉得文章写得不错就给个赞,关注公众号,可订阅更多干货?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢!
公众号:学软件开发就这么简单

发布了19 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lixibang/article/details/104462975