AES加密算法实现
原创 52cxy 04-27 15:32 阅读数:557

       AES( The Advanced Encryption Standard ) 是 美 国 国 家 标 准 与 技 术 研 究 所用 于 加 密 电 子 数 据 的 规 范 。 它 被 预 期 能 成 为 人 们 公 认 的 加 密 包括金融 、 电信和政府 数 字 信 息 的 方 法 。AES 是 一 个 新 的 可 以 用 于 保 护 电 子 数 据 的 加 密 算 法 。 明 确 地 说 , AES 是 一个 迭 代 的 、 对 称 密 钥 分 组 的 密 码 , 它 可 以 使 用 128 、 192 和 256 位 密 钥 , 并 且用 128 位 ( 16 字 节 ) 分 组 加 密 和 解 密 数 据 。 与 公 共 密 钥 密 码 使 用 密 钥 对 不 同 ,

对 称 密 钥 密 码 使 用 相 同 的 密 钥 加 密 和 解 密 数 据 。 通 过 分 组 密 码 返 回 的 加 密 数 据的 位 数 与 输 入 数 据 相 同 。 迭 代 加 密 使 用 一 个 循 环 结 构 ,在 该 循 环 中 重 复 置 换( permutations ) 和 替 换 (substitutions ) 输 入 数 据 。


    在实际开发过程中,不同的开发语言都自带相应的函数来完成加密算法的实现,下面介绍常用的几种开发语言如何完成AES加密算法的加解密操作。

    一、PHP语言

$pass = "123456";
$data = "ItUtil.net";
$iv = '1234567812345678'; //16位

$enData = openssl_encrypt($data, 'AES-128-CBC', $pass, 0, $iv);
$deData = openssl_decrypt($enData, 'AES-128-CBC', $pass, 0, $iv);
var_dump($deData);


    二、JAVA语言

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

public class Main {
	public static String encrypt(String content, String KEY, String IV) throws Exception {
		try {
			byte[] raw = KEY.getBytes("utf-8");
			SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"
			IvParameterSpec ips = new IvParameterSpec(IV.getBytes());
			cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ips);
			byte[] encrypted = cipher.doFinal(content.getBytes());
			String result = new Base64().encodeToString(encrypted);
			return result;
		} catch (Exception ex) {
			System.out.println(ex.toString());
			return null;
		}
	}
	
	public static String dencrypt(String content, String KEY, String IV) throws Exception {
		try {
			byte[] raw = KEY.getBytes("utf-8");
			SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
			IvParameterSpec ips = new IvParameterSpec(IV.getBytes());
			cipher.init(Cipher.DECRYPT_MODE, skeySpec, ips);
			byte[] encrypted1 = new Base64().decodeBase64(content);
			try {
				byte[] original = cipher.doFinal(encrypted1);
				String originalString = new String(original);
				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) {
		try{
			String KEY = "1234567812345678";//JAVA最少16位
			String data = "ItUtil.net";
			String IV = "1234567812345678";//至少16位
			String result = encrypt(data, KEY, IV);
			System.out.println("加密后密文:"+result);
			String result2 = dencrypt(result, KEY, IV);
			System.out.println("解密后明文:"+result2);
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}
}


    三、C#12

共7条评论
52cxy·2022/06/12

afdsaf

评论举报
gaohua027·2022/06/12
aaaaa
评论举报
gaohua027·2022/06/12
aaa
评论举报
gaohua027·2022/06/12
评论举报
gaohua027·2022/06/12
评论举报
gaohua027·2022/06/12
评论举报
gaohua027·2022/06/12
评论举报
52cxy·2022/06/16

感谢分享。

评论举报
52cxy·2022/06/16
评论举报
52cxy·2022/06/16

afadsfas

评论举报
52cxy·2022/06/16

aaaa

评论举报
52cxy·2022/06/16

aaaa

评论举报
52cxy·2022/06/16

abcdefg

评论举报
我要评论