1. 程式人生 > >對稱加密之AES加密詳解

對稱加密之AES加密詳解

aes加密 文件 程序 分享 strong 使用 common key 直接

最近有人問我AES對稱加密是啥,我回答了個大概,發現自己不能清晰的講出來,特此記錄,以供學習

一、對稱加密

對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key)。

二、AES加密

高級加密標準(AES,Advanced Encryption Standard)為最常見的對稱加密算法(微信小程序加密傳輸就是用這個加密算法的)。對稱加密算法也就是加密和解密用相同的密鑰,具有以下幾個特點:

1、最常用的對稱加密算法
2、密鑰建立時間短、靈敏性好、內存需求低
3、實際使用中,使用工作模式為CTR(最好用BC去實現),此工作模式需要引入IV參數(16位的字節數組)
4、密鑰長度128
/192/256,其中192與256需要配置無政策限制權限文件(JDK6) 5、填充模式最常用的兩種PKCS5Padding和PKCS7Padding,其中後者只有BC獨有。
6、加密和解密用到的密鑰是相同的,這種加密方式加密速度非常快,適合經常發送數據的場合。

簡敘和非對稱加密場景的差異
對稱加密:
適合經常發送數據的場合

非對稱加密:加密和解密用的密鑰是不同的,通常加密解密的速度比較慢,適合偶爾發送數據的場合。優點是密鑰傳輸方便。

具體的加密流程如下圖:

技術分享圖片

下面簡單介紹下各個部分的作用與意義:

  • 明文P

  

沒有經過加密的數據。
  • 密鑰K
用來加密明文的密碼,在對稱加密算法中,加密與解密的密鑰是相同的。密鑰為接收方與發送方協商產生,但不可以直接在網絡上傳輸,否則會導致密鑰泄漏,
通常是通過非對稱加密算法加密密鑰,然後再通過網絡傳輸給對方,或者直接面對面商量密鑰。密鑰是絕對不可以泄漏的,否則會被攻擊者還原密文,竊取機密數據。
  • AES加密函數
設AES加密函數為E,則 C = E(K, P),其中P為明文,K為密鑰,C為密文。也就是說,把明文P和密鑰K作為加密函數的參數輸入,則加密函數E會輸出密文C。
  • 密文C
經加密函數處理後的數據
  • AES解密函數
設AES解密函數為D,則 P = D(K, C),其中C為密文,K為密鑰,P為明文。也就是說,把密文C和密鑰K作為解密函數的參數輸入,則解密函數會輸出明文P。

附上加解密代碼:https://github.com/chenyRain/Common-Code/blob/master/AES%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86/Encryption.php

對稱加密之AES加密詳解