當前位置:首頁 » 法院法官 » aes演算法官方實現

aes演算法官方實現

發布時間: 2022-01-06 18:15:34

① 有沒有單純實現aes加密的js演算法

給你一個java aes加密解密的類吧.

import javax.crypto.*;
import javax.crypto.spec.*;

public class AES {
public static String Decrypt(String sSrc, String sKey){
try {
//判斷Key是否正確
if (sKey == null) {
return null;
}
//判斷Key是否為16位
if (sKey.length() != 16) {
throw new Exception("解密key長度不足。");
}
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] encrypted1 = hex2byte(sSrc);
try {
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
} catch (Exception e) {
throw e;
}
} catch (Exception ex) {
throw ex;
}
}
//判斷Key是否正確
public static String Encrypt(String sSrc, String sKey){
if (sKey == null) {
return null;
}
//判斷Key是否為16位
if (sKey.length() != 16) {
throw new Exception("加密key長度不足。");
}
byte[] raw = sKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(sSrc.getBytes());

return byte2hex(encrypted).toLowerCase();
}
public static byte[] hex2byte(String strhex) {
if (strhex == null) {
return null;
}
int l = strhex.length();
if (l % 2 == 1) {
return null;
}
byte[] b = new byte[l / 2];
for (int i = 0; i != l / 2; i++) {
b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2), 16);
}
return b;
}
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1) {
hs = hs + "0" + stmp;
} else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
}
}

② 求個AES演算法的具體實現!就這兩天有效!有資料M我!謝謝

AES的全稱是Advanced Encryption Standard,即高級加密標准。該項目由美國國家標准技術研究所(NIST)於1997年開始啟動並徵集演算法,在2000年確定採用Rijndael 作為其最終演算法,並於2001年被美國商務部部長批准為新的聯邦信息加密標准(FIPS PUB 197)。 FIPS PUB 197中說明該標準的正式生效日期是2002年5月26日。該標准將被NIST每5年重新評估一次。 AES採用的Rijndael演算法的設計者是Joan Daemen(Proton World Int.l)和Vincent Rijmen(Katholieke Universiteit Leuven, ESAT-COSIC),演算法的名字來自兩人名字中字母的組合。Rijndael是一個對稱的分組加密演算法,分組長度和密鑰長度都可變,可分別單獨指定為 128比特,192比特和256比特。但AES中的數據分組長度只採用了Rijndael中的128比特,而不使用192和256比特,密鑰長度和 Rijndael的一致,也分別為128比特,192比特和256比特,並分別被稱為AES-128,AES-192,AES-256。 AES和傳統的分組密碼演算法不同的是它不採用Feistel結構(比如DES中採用的),而是採用了三個不同的可逆一致變換層:線性混合層、非線性層、密 鑰加層。
1 AES演算法的判斷識別 AES中有自己特殊的S盒與逆S盒,可以將此作為判別標志,比如:S盒開頭為: ..... 解密過程使用的逆S盒開頭為: .... 我們用16進制編輯器打開目標文件搜索,或在內存中搜索,如果找到的話就基本可以確定目標是採用AES的演算法。 2 AES演算法分析的基本技巧 若要跟蹤如何加密或解密的過程,那是非常麻煩的。有一個偷懶的辦法,一般C語言的實現AES演算法都會在正式加密數據前進行初始化密鑰,如果這個Call被你找到的話就可以了,因為這個Call會傳遞key字元串。找到key就意味著我們可以自己用程序來來計算。 3 實例分析 本實例是lordor[Nuke Group]編寫的AES演算法的Crackme程序(已收錄到光碟,文件是crackme.rar)。 首先可以使用peid來檢測crackme.exe,看是否加殼了,還好,Lordor特善良,沒有加殼,另外peid有一個插件kanal,可以檢查文件中是否有已知的加密手段,我們可以在kanal中明確看到該crackme的確使用了Rijndael。 我們用Softice的symbol loader載入並運行crackme.exe。 點擊Help->Register,可以看到程序已經給出了一個code:718368679(注意:不同機器不同,我們稱其為機器碼)。 然後我們在Serial框內隨意輸入一個序列號,用Softice下一個斷點bpx getdlgitemtexta, 然後點擊Check,我們就會發現下面的代碼: :00401248 MOV ESI,[ESP+000004A4] :0040124F PUSH 32 :00401251 PUSH 0040E374 :00401256 PUSH 000003E9 :0040125B PUSH ESI :0040125C CALL [USER32!GetDlgItemTextA] ;這個Call後,我們在40E374就可以看到剛才隨意輸入的序列號! :00401262 PUSH 00 :00401264 PUSH 00 :00401266 PUSH 000003E8 :0040126B PUSH ESI :0040126C CALL [USER32!GetDlgItemInt] ;這個Call後,EAX返回的是0x2ad16fa7,即十進制的機器碼718368679 :00401272 PUSH 10 :00401274 PUSH 0040E340 :00401279 PUSH EAX :0040127A MOV [ESP+14],EAX :0040127E CALL 004076E6 ;將機器碼0x2ad16fa7轉化為字元串形式,即在40E340處放置

③ aes演算法最新攻擊手段

DES演算法優點:DES演算法具有極高安全性,到目前為止,除了用窮舉搜索法對DES演算法進行攻擊外,還沒有發現更有效的辦法。

DES演算法缺點:

1、分組比較短。

2、密鑰太短。

3、密碼生命周期短。

4、運算速度較慢。

AES演算法優點:

1、運算速度快。

2、對內存的需求非常低,適合於受限環境。

3、分組長度和密鑰長度設計靈活。

4、 AES標准支持可變分組長度,分組長度可設定為32比特的任意倍數,最小值為128比特,最大值為256比特。

5、 AES的密鑰長度比DES大,它也可設定為32比特的任意倍數,最小值為128比特,最大值為256比特,所以用窮舉法是不可能破解的。

6、很好的抵抗差分密碼分析及線性密碼分析的能力。

AES演算法缺點:目前尚未存在對AES 演算法完整版的成功攻擊,但已經提出對其簡化演算法的攻擊。

(3)aes算法官方實現擴展閱讀:

高級加密標准(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標准。

這個標准用來替代原先的DES,已經被多方分析且廣為全世界所使用。經過五年的甄選流程,高級加密標准由美國國家標准與技術研究院(NIST)於2001年11月26日發布於FIPS PUB 197,並在2002年5月26日成為有效的標准。2006年,高級加密標准已然成為對稱密鑰加密中最流行的演算法之一。

④ aes演算法步驟

aes演算法由四個不同的變換組成,包括一個置換和三個替代:

位元組代替(SubBytes):用一個S盒完成分組的位元組到位元組的代替。

行移位(ShiftRows):一個簡單的置換。

列混淆(MixColumns):利用域GF(28)上的算術特性的一個代替。

輪密鑰加(AddRoundKey):當前分組和擴展密鑰的一部分進行按位XOR(異或)。

輸入的密鑰被擴展成由44個32位子所組成的數組w[i],由上圖可知,每輪有四個不同的字(128位)作為該輪到密鑰。

對加密和解密的操作,演算法由輪密鑰加開始,接著執行9輪迭代運算,每輪都包含所有4個階段的代替,接著是第10輪的三個階段。

僅僅在輪密鑰加階段使用密鑰。由於這個原因,該演算法以輪密鑰加開始,以輪密鑰加結束。

⑤ 密碼學AES的MixColumns演算法怎麼實現,已經寫好宏定義

#define Multiply(x,y) (((y & 1) * x) \
^ ((y>>1 & 1) * xtime(x)) \
^ ((y>>2 & 1) * xtime(xtime(x))) \
^ ((y>>3 & 1) * xtime(xtime(xtime(x)))) \
^ ((y>>4 & 1) * xtime(xtime(xtime(xtime(x))))) \
^ ((y>>5 & 1) * xtime(xtime(xtime(xtime(xtime(x)))))) \
^ ((y>>6 & 1) * xtime(xtime(xtime(xtime(xtime(xtime(x))))))) \
^ ((y>>7 & 1) * xtime(xtime(xtime(xtime(xtime(xtime(xtime(x)))))))) \
)

怎麼到4你就不寫了,還有5 6 7呢,加上就好

另外記著不要直接這樣,否則一次循環沒結束state[0][i]的值就變了
state[0][i]=Multiply(0x02,state[0][i])^Multiply(0x03,state[1][i])^Multiply(0x01,state[2][i])^Multiply(0x01,state[3][i]);
先用臨時變數保存,再統一賦值

⑥ 通過Java如何實現AES密碼演算法

1. AES加密字元串

public static byte[] encrypt(String content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");// 創建AES的Key生產者

kgen.init(128, new SecureRandom(password.getBytes()));// 利用用戶密碼作為隨機數初始化出
// 128位的key生產者
//加密沒關系,SecureRandom是生成安全隨機數序列,password.getBytes()是種子,只要種子相同,序列就一樣,所以解密只要有password就行

SecretKey secretKey = kgen.generateKey();// 根據用戶密碼,生成一個密鑰

byte[] enCodeFormat = secretKey.getEncoded();// 返回基本編碼格式的密鑰,如果此密鑰不支持編碼,則返回
// null。

SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 轉換為AES專用密鑰

Cipher cipher = Cipher.getInstance("AES");// 創建密碼器

byte[] byteContent = content.getBytes("utf-8");

cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化為加密模式的密碼器

byte[] result = cipher.doFinal(byteContent);// 加密

return result;

} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
2. AES解密
public static byte[] decrypt(byte[] content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");// 創建AES的Key生產者
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();// 根據用戶密碼,生成一個密鑰
byte[] enCodeFormat = secretKey.getEncoded();// 返回基本編碼格式的密鑰
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 轉換為AES專用密鑰
Cipher cipher = Cipher.getInstance("AES");// 創建密碼器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化為解密模式的密碼器
byte[] result = cipher.doFinal(content);
return result; // 明文

} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}

⑦ AES加密演算法原理

AES是分組密鑰,演算法輸入128位數據,密鑰長度也是128位。用Nr表示對一個數據分組加密的輪數(加密輪數與密鑰長度的關系如表1所列)。每一輪都需要一個與輸入分組具有相同長度的擴展密鑰Expandedkey(i)的參與。由於外部輸入的加密密鑰K長度有限,所以在演算法中要用一個密鑰擴展程序(Keyexpansion)把外部密鑰K擴展成更長的比特串,以生成各輪的加密和解密密鑰。
1.1圈變化
AES每一個圈變換由以下三個層組成:
非線性層——進行Subbyte變換;
線行混合層——進行ShiftRow和MixColumn運算;
密鑰加層——進行AddRoundKey運算。
① Subbyte變換是作用在狀態中每個位元組上的一種非線性位元組轉換,可以通過計算出來的S盒進行映射。

② ShiftRow是一個位元組換位。它將狀態中的行按照不同的偏移量進行循環移位,而這個偏移量也是根據Nb的不同而選擇的[3]。

③ 在MixColumn變換中,把狀態中的每一列看作GF(28)上的多項式a(x)與固定多項式c(x)相乘的結果。 b(x)=c(x)*a(x)的系數這樣計算:
*運算不是普通的乘法運算,而是特殊的運算,即 b(x)=c(x)·a(x)(mod x4+1) 對於這個運算 b0=02。a0+03。a1+a2+a3 令xtime(a0)=02。a0
其中,符號「。」表示模一個八次不可約多項式的同餘乘法[3]。

對於逆變化,其矩陣C要改變成相應的D,即b(x)=d(x)*a(x)。
④ 密鑰加層運算(addround)是將圈密鑰狀態中的對應位元組按位「異或」。

⑤ 根據線性變化的性質[1],解密運算是加密變化的逆變化。

⑧ aes演算法c語言實現

http://wenku..com/link?url=__-4vlYsYV62kNnt7l9SF3 這里很多,如果不是專門弄這個的很少會去研究的。

專門弄這個的人自己的代碼很少給出來的。。

熱點內容
用不上的法律責任 發布:2025-06-26 12:28:52 瀏覽:456
法院交換證據 發布:2025-06-26 12:22:56 瀏覽:390
第二章經濟法基礎知識講義 發布:2025-06-26 12:16:47 瀏覽:242
學大學存在的法律責任 發布:2025-06-26 12:10:18 瀏覽:662
外觀專利申請晚了有法律效力嗎 發布:2025-06-26 11:54:55 瀏覽:833
法治的邊界 發布:2025-06-26 11:50:38 瀏覽:131
民法民事訴訟法 發布:2025-06-26 11:36:56 瀏覽:282
國內兩年製法律碩士 發布:2025-06-26 11:32:45 瀏覽:18
法規科理念 發布:2025-06-26 11:32:43 瀏覽:851
山東大學法學院地址 發布:2025-06-26 11:31:31 瀏覽:203