JAVA 與C# 的AES的加密函數、解密函數,加密解密結果一致

因爲開發需要用到java以及c#之間的數據傳輸,所以使用到AES的加密函數、解密函數。親測可用,分享給大家:

java代碼:

package my;

import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.*;

public class Xianchengmingming {   
    public static void main(String[] args) throws Exception {   
        String key = "ABCDEFGHIJKLMNRS";   
        String value="hsb:123:1489048530930:60001";   
        System.out.println("加密:"+aesEncrypt(value,key)); 
        System.out.println("解密:"+aesDecrypt(aesEncrypt(value,key),key));      
    }   
    /**
	 * AES的加密函數
	 * @param str 傳入需要加密的字符
	 * @param key 傳入一個16位長度的密鑰。否則報錯
	 * @return 執行成功返回加密結果,否則報錯
	 * @throws Exception 拋出一個加密異常
	 */
	public static String aesEncrypt(String str, String key) throws Exception {
        if (str == null || key == null) return null;
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "AES"));
        byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
        return new BASE64Encoder().encode(bytes);
    }
	/**
	 * AES的解密函數
	 * @param str 傳入需要解密的字符
	 * @param key 傳入一個16位長度的密鑰。否則報錯
	 * @return 執行成功返回加密結果,否則報錯
	 * @throws Exception 拋出一個解密異常
	 */
    public static String aesDecrypt(String str, String key) throws Exception {
        if (str == null || key == null) return null;
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "AES"));
        byte[] bytes = new BASE64Decoder().decodeBuffer(str);
        bytes = cipher.doFinal(bytes);
        return new String(bytes, "utf-8");
    } 
} 

C#代碼:

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO; 

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            String key = "ABCDEFGHIJKLMNRS";
            Console.WriteLine("解密" + Decrypt("/4+UJG55uVHN6rninZ6Z8nUe2OJHGGAYqcdmdDeQhiM=", key));
            Console.ReadLine();
        }

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

    }

}
 
java運行結果:


c#運行結果:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章