AES128位加密 C#与Java转换,验证可用

 C#加密代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using javax.crypto;
using System.Security.Cryptography;
using java.security;



namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            String key = "haha";
            byte[] a = Convert.FromBase64String("BP8SBhkYNn/YRQo5V7PSmg==");
            string result = DeAES(a, key);
            Console.WriteLine(result);

            byte[] b = System.Text.Encoding.Default.GetBytes("admin_123");
            string result2 = EnAES(b, key);
            Console.WriteLine(result2);
            Console.Read();


        }

        public static string DeAES(byte[] content, string key)
        {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
            secureRandom.setSeed(Encoding.ASCII.GetBytes(key));
            kgen.init(128, secureRandom);
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();

            using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
            {
                aesProvider.Key = enCodeFormat;
                aesProvider.Mode = CipherMode.ECB;
                aesProvider.Padding = PaddingMode.PKCS7;
                using (ICryptoTransform cryptoTransform = aesProvider.CreateDecryptor())
                {
                    byte[] inputBuffers = content;
                    byte[] results = cryptoTransform.TransformFinalBlock(inputBuffers, 0, inputBuffers.Length);
                    aesProvider.Clear();
                    return Encoding.UTF8.GetString(results);
                }
            }
        }

        public static string EnAES(byte[] content, string key)
        {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
            secureRandom.setSeed(Encoding.ASCII.GetBytes(key));
            kgen.init(128, secureRandom);
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();

            using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
            {
                aesProvider.Key = enCodeFormat;
                aesProvider.Mode = CipherMode.ECB;
                aesProvider.Padding = PaddingMode.PKCS7;
                using (ICryptoTransform cryptoTransform = aesProvider.CreateEncryptor())
                {
                    byte[] inputBuffers = content;
                    byte[] results = cryptoTransform.TransformFinalBlock(inputBuffers, 0, inputBuffers.Length);
                    aesProvider.Clear();
                    aesProvider.Dispose();
                    return Convert.ToBase64String(results, 0, results.Length);
                    //return Encoding.UTF8.GetString(results);
                }
            }
        }
        
    }
}

Java加密代码:

public class Enryption {

    private static final String KEY_ALGORITHM = "AES";
    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";//默认的加密算法

    private static final String pwd = "haha";
    /*加密*/
    public static String encrypt(String content) {
        try {
            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
            byte[] bytes = content.getBytes("utf-8");
            cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(pwd));
            byte[] result = cipher.doFinal(bytes);
            log.info("加密success");
            return Base64.encodeBase64String(result);
        } catch (Exception ex) {
        }
        return null;
    }

    /*AES 解密*/
    public static String decrypt(String content) {
        try {
            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
            cipher.init(Cipher.DECRYPT_MODE, getSecretKey(pwd));
            byte[] result = cipher.doFinal(Base64.decodeBase64(content));
            return new String(result, "utf-8");
        } catch (Exception ex) {
        }

        return null;
    }

    /*生成加密秘钥*/
    private static SecretKeySpec getSecretKey(final String password) {
        KeyGenerator kg = null;

        try {

            kg = KeyGenerator.getInstance(KEY_ALGORITHM);
            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
            random.setSeed(password.getBytes());
            //AES 要求密钥长度为 128
            kg.init(128, random);
            SecretKey secretKey = kg.generateKey();
            return new SecretKeySpec(secretKey.getEncoded(), KEY_ALGORITHM);// 转换为AES专用密钥
        } catch (NoSuchAlgorithmException ex) {
        }
        return null;
    }

    public static void main(String[] args) {
        String s = "test";
        String encrypt = encrypt(s);
        System.out.println(encrypt);
    }
}

 

 

你可能感兴趣的:(加解密)