各位眼光独到,学贯中西的读者们,你们好啊!今天我们讨论一下AES算法及其识别。
虽然DES算法的分组大小是64位,但是由于DES算法的密钥长度只有56位,因此DES算法存在着弱点,容易受到暴力破解和差分攻击等攻击手段的威胁。因此,在实际应用中,DES算法已经不再被广泛使用,而被更加安全的算法所取代,如AES算法等。
为了强调大于56位密钥对高强度安全的重要性,RAS数据安全(RSA Data Security)从1997年早期就发起了一系列的DES攻击竞赛。1998年电子前沿基金会(Electronic Frontier Foundation)在不到三天的时间里攻破了DES,赢得了RSA DES挑战II-2竞赛,EFF(电子前沿基金会缩写)用了一种专门开发的计算机,叫做DES破解者,它的造价不到25万美元。它的加密芯片能够使DES破解者有每秒钟产生880亿密钥的能力。更近一些,在1999年早期,分布式网络(Distributed. Net)创纪录的用22小时15分钟,利用DES破解者和全世界接近10万台电脑组成的网络赢得了RSA DES挑战III竞赛。DES破解者和联网电脑合起来每秒能够测试2450亿的密钥。另外,已经被证实,可以组建花费10万美元的硬件设施,以使其在3.5小时内攻破DES。这恰好验证了现在任何组织,只要利用现代化的资源就可以轻松破解DES。
不过,现在可以使用3DES的方式扩展密钥长度来进行加密。
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
加密图解

图里面的每个流程具体的讲解,看下面的视频链接,依然是UP主(可厉害的土豆)讲的:
https://www.bilibili.com/video/BV1i341187fK
里面说的很清楚,加密流程,密钥扩展等。总的来说,这个算法并不难,只是非常的繁琐。至于为什么要这样做,我就不懂了。
AES是取代DES的,其大致流程是差不多的,也有S盒,置换表等。关于S盒是否是固定的,我猜测不是的,但是应该也需要满足一定的条件。
Java算法识别
先看其使用:
// 加密
public static String Encrypt(String sSrc, String sKey) throws Exception {
if (sKey == null) {
System.out.print("Key为空null");
return null;
}
// 判断Key是否为16位
if (sKey.length() != 16) {
System.out.print("Key长度不是16位");
return null;
}
byte[] raw = sKey.getBytes("utf-8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/填充方式"
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
String result = null;
result = new String(Base64.encode(encrypted, Base64.DEFAULT));
return result;//使用BASE64做转码功能
}
// 解密
public static String Decrypt(String sSrc, String sKey) throws Exception {
try {
// 判断Key是否正确
if (sKey == null) {
System.out.print("Key为空null");
return null;
}
&nb

最低0.47元/天 解锁文章
3514

被折叠的 条评论
为什么被折叠?



