常见加密算法05 - 分组密码AES

​各位眼光独到,学贯中西的读者们,你们好啊!今天我们讨论一下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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二手的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值