1. 程式人生 > >PHP 與JS AES-256-CBC (高階加密標準 256祕鑰長度 CBC模式)

PHP 與JS AES-256-CBC (高階加密標準 256祕鑰長度 CBC模式)

PHP文章 :https://segmentfault.com/a/1190000010128665;

微信小程式:https://blog.csdn.net/a1271062285/article/details/78331574
 

 

    AES 
      高階加密標準 
      密碼學中的高階加密標準(Advanced Encryption Standard,AES),又稱 高階加密標準Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。經過五年的甄選流程,高階加密標準由美國國家標準與技術研究院 (NIST)於2001年11月26日釋出於FIPS PUB 197,並在2002年5月26日成為有效的標準。2006年,高階加密標準已然成為對稱金鑰加密中最流行的演算法之一。 
      該演算法為比利時密碼學家Joan Daemen和Vincent Rijmen所設計,結合兩位作者的名字,以Rijndael之命名之,投稿高階加密標準的甄選流程。(Rijdael的發音近於 "Rhinedoll"。) 
      高階資料加密標準

 
      對稱密碼體制的發展趨勢將以分組密碼為重點。分組密碼演算法通常由金鑰擴充套件演算法和加密(解密)演算法兩部分組成。金鑰擴充套件演算法將b位元組使用者主金鑰擴充套件成r個子金鑰。加密演算法由一個密碼學上的弱函式f與r個子金鑰迭代r次組成。混亂和金鑰擴散是分組密碼演算法設計的基本原則。抵禦已知明文的差分和線性攻擊,可變長金鑰和分組是該體制的設計要點。 
      AES是美國國家標準技術研究所NIST旨在取代DES的21世紀的加密標準。 


      AES的基本要求是,採用對稱分組密碼體制,金鑰長度的最少支援為128、192、256,分組長度128位,演算法應易於各種硬體和軟體實現。1998年NIST開始AES第一輪分析、測試和徵集,共產生了15個候選演算法。1999年3月完成了第二輪AES2的分析、測試。2000年10月2日美國政府正式宣佈選中比利時密碼學家Joan Daemen 和 Vincent Rijmen 提出的一種密碼演算法RIJNDAEL 作為 AES. 
      在應用方面,儘管DES在安全上是脆弱的,但由於快速DES晶片的大量生產,使得DES仍能暫時繼續使用,為提高安全強度,通常使用獨立金鑰的三級DES。但是DES遲早要被AES代替。流密碼體制較之分組密碼在理論上成熟且安全,但未被列入下一代加密標準。
      AES加密資料塊分組長度必須為128位元,金鑰長度可以是128位元、192位元、256位元中的任意一個(如果資料塊及金鑰長度不足時,會補齊)。AES加密有很多輪的重複和變換。大致步驟如下:1、金鑰擴充套件(KeyExpansion),2、初始輪(Initial Round),3、重複輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最終輪(Final Round),最終輪沒有MixColumns。 
      ECB(Electronic Code Book電子密碼本)模式

 
      ECB模式是最早採用和最簡單的模式,它將加密的資料分成若干組,每組的大小跟加密金鑰長度相同,然後每組都用相同的金鑰進行加密。 
      優點:   1.簡單;   2.有利於平行計算;  3.誤差不會被擴散; 
      缺點:   1.不能隱藏明文的模式;  2.可能對明文進行主動攻擊; 
      因此,此模式適於加密小訊息。 
      CBC(Cipher Block Chaining,加密塊鏈)模式 
      優點:  不容易主動攻擊,安全性好於ECB,適合傳輸長度長的報文,是SSL、IPSec的標準。 
      缺點:  1.不利於平行計算;  2.誤差傳遞;  3.需要初始化向量IV 
      CFB(Cipher FeedBack Mode,加密反饋)模式 
      優點:
      1.隱藏了明文模式;  2.分組密碼轉化為流模式;  3.可以及時加密傳送小於分組的資料; 
      缺點:  1.不利於平行計算;  2.誤差傳送:一個明文單元損壞影響多個單元;  3.唯一的IV; 
      OFB(Output FeedBack,輸出反饋)模式 
      優點:  1.隱藏了明文模式;  2.分組密碼轉化為流模式;  3.可以及時加密傳送小於分組的資料; 
      缺點:  1.不利於平行計算;  2.對明文的主動攻擊是可能的;  3.誤差傳送:一個明文單元損壞影響多個單元;