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
评论举报