(资料图)
不论前途如何,不管发生什么事情,我们都不失去希望,希望是一种美德。——《雨果传》
MD5
、SHA
等摘要算法,它们是不可逆的。双向加密包括对称加密和非对称加密。双向加密是可逆的,存在密文的密钥。对称加密是指加密和解密使用相同的密钥,包括AES
加密、DES
加密等。非对称加密是指加密和解密使用不同的密钥,包括RSA
加密等。是用来替代DES的新一代分组加密算法。AES支持三种长度的密钥:128位、192位、256位。AES:高级加密标准(Advanced Encryption Standard)是美国联邦政府采用的一种区块加密标准,是目前最流行的一种
对称加密算法
。
AES
的加解密过程和DES
一样,都是通过分组加密、分组解密。所谓分组加密,就是将待加解密的内容按照128
位进行分组,将密钥按照128
位、192
位、256
位进行分组,分别将分组后的明文与相应分组后的密钥进行加解密。
加密: 明文与密钥分组后,对每组:明文组与密钥组处理 -> 轮密钥加 -> 10轮加密 -> 密文组 解密: 对每组:密文组 -> 轮密钥加 -> 10轮解密 -> 明文组
明文分组: 每组长度相等,都是128位(16字节); 密钥分组: 有128位、192位、256位,推荐加密轮数分别为 10、12、14
密钥组处理: 以密钥分组每组128位为例(则推荐加密轮数为10,前9次执行操作一样,第十次有所不同) 类似地,128位密钥也是用字节为单位的矩阵表示,通过密钥编排函数,形成具有44个元素的序列W[0],W[1], … ,W[43](每个元素4个字节);其中,W[0],W[1],W[2],W[3]为原始密钥,其余40个元素分为10组,每组4个元素(4*4=16字节),分别用于10轮加密。
AES加密算法涉及4种操作: 字节替代(SubBytes)
、行移位(ShiftRows)
、列混淆(MixColumns)
和轮密钥加(AddRoundKey
)。下图给出了AES加解密的流程:
public static String genAesSecret(){ try { KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); //密钥长度,单位:字节,AES支持128、192、256字节长度的密钥,上面文章已介绍 keyGenerator.init(128); SecretKey sk = keyGenerator.generateKey(); byte[] b = sk.getEncoded(); return Base64.encodeBase64String(b); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); throw new RuntimeException("没有此算法"); } }
public static String aesEncrypt(String content) throws Exception { //指定加密算法 Cipher cipher = Cipher.getInstance("AES"); //创建加密规则:指定key和加密类型 SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET.getBytes(), "AES"); //指定加密模式为加密,指定加密规则 cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); //调用加密方法 byte[] result = cipher.doFinal(content.getBytes()); //用Base64编码 return new String(java.util.Base64.getEncoder().encode(result)); }
public static String aesDecrypt(String content) throws Exception { //Base64解码 byte[] result = java.util.Base64.getDecoder().decode(content); //指定加密算法 Cipher cipher = Cipher.getInstance("AES"); //创建加密规则:指定key和加密类型 SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET.getBytes(), "AES"); //指定加密模式为解密,指定加密规则 cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); return new String(cipher.doFinal(result)); }
注意:SECRET.getBytes()
我这里是一个常量密钥,通过密钥生成后写成常量SECRET
。
安装依赖
npm install crypto-js --save-dev
// 引入import CryptoJS from "crypto-js"// 密钥const AES_KEY = "P@S5W0rDK3yBACHU" // 后端提供// 解密export function decrypt (word) { var key = CryptoJS.enc.Utf8.parse(AES_KEY) var decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) return CryptoJS.enc.Utf8.stringify(decrypt).toString()}
下一篇:最后一页
今年的政府工作报告提出,“把恢复和扩大消费摆在优先位置”“稳定大宗消费,推动生活服务消费恢复”。在若干项重点工作中,“着力扩大国内需
1、向左转|向右转。本文到此分享完毕,希望对大家有所帮助。
1、平均数就是把一组数据相加。2、再除以这组数据的个数。3、就是平均数。本文就为大家分享到这里,希望小伙伴们会喜欢。
10月26日,何炅更博晒出《快乐大本营》宣传照,并祝杜海涛生日快乐。他说最喜欢的是第一张,一家人整整齐齐开心大笑。但也是因为第一张,何老
1、【数据准入】 淘宝网卖家须满足以下数据条件才有机会入驻“淘宝汇吃”市场: (一) 《符合淘宝网营销
解答:1、我很高兴爱上你。完整歌词如下:2、我很高兴爱上你——水木年华3、单词:卢庚戌4、屈:人5、编曲:李延亮6、我只
电脑上的文件一般都是我们自己创建的,或者u盘和收到的文件。这些文件一般都是世界、文档、表格、视频等重要的东西。文件长时间
1、一、性质不同纯虚数:一个实数乘以i称为纯虚数。2、2、虚数:在复数域中,负数-1的平方根记为i(即i²=-1)。3、
6月13日,王者荣耀KPL春季总决赛正式开始,由AG超玩会对战到TS。而在全部的比赛中,双方打的非常激烈,每局都有非常经常的操作,比分也一直咬
1、欧泊的英文为Opal,源于拉丁文Opalus,意思是“集宝石之美于一身”。2、古罗马自然科学家普林尼曾说:“在一块欧
X 关闭
上海推进三大先导产业规模实现倍增 打响“上海制造”品牌
深圳机场开通今年第5条国际货运航线 为深圳企业外贸出口提供新支撑
湖南公布90个建筑施工质量管理不合格工地名单
公众如何防范奥密克戎变异株?疾控专家回应
河南中招体育考试4月1日启动 计入中招成绩总分
婴幼儿疫苗最近暂停接种?郑州市疫情防控相关部门回应
X 关闭