当前位置:首页 » 法院法官 » 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 18:30:40 浏览:3
有音乐天赋的人是无法学习数学的 发布:2025-06-26 18:15:08 浏览:805
法学去国企 发布:2025-06-26 18:13:51 浏览:192
经销管理条例 发布:2025-06-26 17:57:43 浏览:214
法律效力的说法不正确的是 发布:2025-06-26 17:49:33 浏览:479
司法查询规定 发布:2025-06-26 17:48:52 浏览:972
婚姻法夫妻法律关系 发布:2025-06-26 17:32:48 浏览:934
英美法系国家遗嘱自由的现状及其限制立法 发布:2025-06-26 17:31:29 浏览:328
法院办公室工作总结 发布:2025-06-26 17:08:07 浏览:158
刑法九二百三十六 发布:2025-06-26 17:07:22 浏览:815