RSA
非對稱加密,公鑰加密,私鑰解密,反之亦然。由於需要大數的乘冪求模等算法,運行速度慢,不易於硬件實現。
通常私鑰長度有512bit,1024bit,2048bit,4096bit,長度越長,越安全,但是生成密鑰越慢,加解密也越耗時。
既然是加密,那肯定是不希望別人知道我的消息,所以只有我才能解密,所以可得出公鑰負責加密,私鑰負責解密;
同理,既然是簽名,那肯定是不希望有人冒充我發消息,只有我才能發布這個簽名,所以可得出私鑰負責簽名,公鑰負責驗證。
AES
對稱加密,密鑰最長只有256個bit,執行速度快,易於硬件實現。由於是對稱加密,密鑰需要在傳輸前通訊雙方獲知。
基於以上特點,通常使用RSA來首先傳輸AES的密鑰給對方,然后再使用AES來進行加密通訊。

AES加密數據塊分組長度必須為128比特,密鑰長度可以是128比特、192比特、256比特中的任意一個(如果數據塊及密鑰
長度不足時,會補齊)。AES加密有很多輪的重復和變換。大致步驟如下:
1、密鑰擴展(KeyExpansion),
2、初始輪(Initial Round),
3、重復輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,
4、最終輪(Final Round),最終輪沒有MixColumns
AES加密過程是在一個4×4的字節矩陣上運作,這個矩陣又稱為“狀態(state)”,其初值就是一個明文區塊(矩陣中一個元
素大小就是明文區塊中的一個Byte)。加密時,各輪AES加密循環(除最后一輪外)均包含4個步驟:
AddRoundKey (加輪秘鑰)— 矩陣中的每一個字節都與該次輪秘鑰(round key)做XOR運算。
SubBytes (字節代換)— 通過非線性的替換函數,用查找表的方式把每個字節替換成對應的字節。
ShiftRows (行移位)— 將矩陣中的每個橫列進行循環式移位。
MixColumns (列混淆)— 使用線性轉換來混合每列的四個字節。
字節代換
代換表(S盒)被設計成能夠抵擋所有已知的攻擊
例如,十六進制{95}對應的的行值是9,列值是5,S盒中此處的值是{2A}。因此{95}被映射為{2A}

