2023-03-10 01:01:36來源:騰訊云
(資料圖片)
不論前途如何,不管發生什么事情,我們都不失去希望,希望是一種美德。——《雨果傳》
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()}
標簽:
AES的加解密過程和DES一樣,都是通過分組加密、分組解密。所謂分組加密,就是將待加解密的內容按照128位...
據《華爾街日報》當地時間8日報道,有情報官員稱,“北溪”管道爆炸前,美國中央情報局(CIA)曾向歐洲發...
1、簡報必須突出的主題是:人民法院為人民,排除千難萬險匡扶正義。2、簡報不要平鋪直敘辦案過程,要把...
青年驛站:融寓青年公寓服務園區:環上大科創園區零號基地、二號基地、四號基地青年驛站具體房源信息▲...
喬治:我們有奪冠需要的一切,威少以團隊為先,威少,快船隊,美國籃球,保羅-喬治,保羅·喬治,多倫多猛龍隊...