午夜激情网址,精品久久久久久777米琪桃花,性生活TV日韩,骚货自慰久草

首頁 >頭條 > 正文

帶你詳細了解AES算法《附帶java、vue實現(xiàn)》

2023-03-10 01:01:36來源:騰訊云


(資料圖片)

不論前途如何,不管發(fā)生什么事情,我們都不失去希望,希望是一種美德。——《雨果傳》

1.加密算法

在密碼學中,加密算法分為單向加密和雙向加密。單向加密包括MD5、SHA等摘要算法,它們是不可逆的。雙向加密包括對稱加密和非對稱加密。雙向加密是可逆的,存在密文的密鑰。對稱加密是指加密和解密使用相同的密鑰,包括AES加密、DES加密等。非對稱加密是指加密和解密使用不同的密鑰,包括RSA加密等。

2.AES介紹

AES:高級加密標準(Advanced Encryption Standard)是美國聯(lián)邦政府采用的一種區(qū)塊加密標準,是目前最流行的一種對稱加密算法

是用來替代DES的新一代分組加密算法。AES支持三種長度的密鑰:128位、192位、256位。

3.AES的加密過程(AES處理單位:字節(jié))

AES的加解密過程和DES一樣,都是通過分組加密、分組解密。所謂分組加密,就是將待加解密的內(nèi)容按照128位進行分組,將密鑰按照128位、192位、256位進行分組,分別將分組后的明文與相應分組后的密鑰進行加解密。

加密: 明文與密鑰分組后,對每組:明文組與密鑰組處理 -> 輪密鑰加 -> 10輪加密 -> 密文組 解密: 對每組:密文組 -> 輪密鑰加 -> 10輪解密 -> 明文組

明文分組: 每組長度相等,都是128位(16字節(jié)); 密鑰分組: 有128位、192位、256位,推薦加密輪數(shù)分別為 10、12、14

密鑰組處理: 以密鑰分組每組128位為例(則推薦加密輪數(shù)為10,前9次執(zhí)行操作一樣,第十次有所不同) 類似地,128位密鑰也是用字節(jié)為單位的矩陣表示,通過密鑰編排函數(shù),形成具有44個元素的序列W[0],W[1], … ,W[43](每個元素4個字節(jié));其中,W[0],W[1],W[2],W[3]為原始密鑰,其余40個元素分為10組,每組4個元素(4*4=16字節(jié)),分別用于10輪加密。

AES加密算法涉及4種操作: 字節(jié)替代(SubBytes)行移位(ShiftRows)、列混淆(MixColumns)輪密鑰加(AddRoundKey)。下圖給出了AES加解密的流程:

AddRoundKey (輪密鑰加)— 矩陣中的每一個字節(jié)都與該次輪密鑰(round key)做XOR運算;每個子密鑰由密鑰生成方案產(chǎn)生。SubBytes(字節(jié)替代) — 通過非線性的替換函數(shù),用查找表的方式把每個字節(jié)替換成對應的字節(jié)。ShiftRows(行移位) — 將矩陣中的每個橫列進行循環(huán)式移位。MixColumns (列混淆)— 為了充分混合矩陣中各個直行的操作。這個步驟使用線性轉(zhuǎn)換來混合每列的四個字節(jié)。

4.代碼實現(xiàn)

1.生成密鑰

public static String genAesSecret(){    try {      KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");      //密鑰長度,單位:字節(jié),AES支持128、192、256字節(jié)長度的密鑰,上面文章已介紹      keyGenerator.init(128);      SecretKey sk = keyGenerator.generateKey();      byte[] b = sk.getEncoded();      return Base64.encodeBase64String(b);    }    catch (NoSuchAlgorithmException e) {      e.printStackTrace();      throw new RuntimeException("沒有此算法");    }  }

2.AES加密

public static String aesEncrypt(String content) throws Exception {    //指定加密算法    Cipher cipher = Cipher.getInstance("AES");    //創(chuàng)建加密規(guī)則:指定key和加密類型    SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET.getBytes(), "AES");    //指定加密模式為加密,指定加密規(guī)則    cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);    //調(diào)用加密方法    byte[] result = cipher.doFinal(content.getBytes());    //用Base64編碼    return new String(java.util.Base64.getEncoder().encode(result));  }

3.AES解密

public static String aesDecrypt(String content) throws Exception {    //Base64解碼    byte[] result = java.util.Base64.getDecoder().decode(content);    //指定加密算法    Cipher cipher = Cipher.getInstance("AES");    //創(chuàng)建加密規(guī)則:指定key和加密類型    SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET.getBytes(), "AES");    //指定加密模式為解密,指定加密規(guī)則    cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);    return new String(cipher.doFinal(result));  }

注意:SECRET.getBytes()我這里是一個常量密鑰,通過密鑰生成后寫成常量SECRET。

4.前端解密

安裝依賴

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()}

5.Java測試用例

責任編輯:

標簽:

免責聲明

頭條新聞

推薦內(nèi)容

狠狠干综合| 中文无码成人免费视频| 在线成人免费视频三区| 精品少妇BBW| 中文字幕色婷婷久五月| 成人性AV无码| 欧美极品少妇xxxxx| 91ss69xyz| 江门市| 色视频 中文字幕| 亚洲国产另类久久精品| 亚洲欧洲一区| 久久996精品| 超碰100在线| 久久久亚洲精品迷奸| 天堂在线交| 日韩精品三级| 大香蕉久久久成人| 成人男人天堂网站| 精品免费国产| 日韩欧美一区二区色| 五码在线免费视频| 日韩欧美精| av亲亲伊人| 噜噜狠狠狠狠综合久久| 日本少妇之精产国品| 丁香五月激情久久| 国产在线视频一区| 国产精品久久频道| 爆乳无码在线观看| 高清无码不卡无码不卡| 婷婷五月天激情电影| 中字幕精品一区| 久久久夜夜| 久久综合凹凸| 国产传媒资源网站| 国产香蕉尹人在线视频你懂的| A级毛片手机免费看| 欧美极品少妇性运交| 综合加勒比AV| 亚洲欧美日韩人成综合|