从零学习 CA 系列 (四) -- 常见对称加密算法分析

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 本文参考文献:《PKI/CA 与数字证书技术大全》DES和AES算法详解如有理解bug, 请大家指正。DESDES 算法是一个分组算法,它以64位分组对数据进行加解密。

本文参考文献:

如有理解bug, 请大家指正。

DES

DES 算法是一个分组算法,它以64位分组对数据进行加解密。其秘钥长度为56位,由8个字节组成,每个字节的第8位用作奇偶校验。秘钥可以是任意的56位比特块,且可以任意时间改变,其中极少数56位比特块被认为是弱密码,在使用中需要避开这些弱密钥。

img_91a87b313f78471d34b652c0963dee01.png
DES图解

注: 外部输入的56位密钥(64位中去掉8个校验位) 通过置换和位移操作生成加密和解密需要的16个48位的子密钥。该16个子密钥分别用于乘积变换中的16轮运算。

3DES

又称 Triple DES, 是 DES 算法的一种变种,它使用 3 个56位的秘钥对数据进行3次加密。3DES加解密过程如下图:

img_5d5ad9671aee9a36b5604529c2694366.jpe
3DES加解密

K1, K2, K3 决定了 3DES 算法的安全性。若3个密钥互不相同,则3DES算法的密钥长度为168位,该算法又称为 三倍长秘钥的3DES。如 K1 = K3 ,则3DES算法的密钥长度变为 112 位,该算法又被称为 2 倍长密钥的 3DES。

AES

1997年4月,美国国家标准和技术委员会 (NIST) 开始征集 “高级加密标准(AES)”算法,以便替代 DES 算法。 1998年5月,NIST 宣布接受15个新的候选算法并提请全世界密码研究界协助分析这些候选算法,包括对每个算法的安全性和效率特性进行初步检验。NIST 考察了这些初步的研究结果,并选定 MARS、RC6、 Rijndael、Serpent 和 Twofish 等5个算法做为参加决赛的算法。经公众对决赛算法进行更进一步的分析评论,2000年10月,NIST 推荐 Rijndael 作为高级加密标准(AES),并于 2001 年11月26日发布于 FIPS PUB 197, 2002 年5月26日成为正式标准。

Rijndael 是一种迭代分组加密,采用的是代替/置换网络(spn),它对一个 128 位的数据块进行加密操作。加密时,首先将输入的128位数据排成 4 x 4 的字节矩阵,然后根据不同的秘钥长度,进行10(128位秘钥)、12(192位秘钥)、14(254位秘钥)轮的运算。其128位密钥的加密流程如下图:

img_2ac02ce44eb715e549762c7ef8a4878d.jpe
128位密钥的加密流程

其中,每个轮函数由4层组成:

  • 第1 层非线性层,将一个 8x8 的s盒应用于每个字节
  • 第2层(行移位变换)和第3层(列混合)是线性混合层,将 4x4 的阵列按行位移,按列混合。
  • 第4层(加密钥变换),轮密钥异或到阵列的每个字节
img_5ce6f3b6cf704bf87e5d61fa6a472b1d.jpe
轮变换过程

SM4

SM4 算法是由中国国家密码管理局于 2006 年 1月 6日发布,在无线局域网产品中批准使用的对称密码算法。

SM4 密码算法是一个迭代分组密码算法。该算法的信息块长度为 128 位。加密算法与密钥扩展算法都采用 32 位非线性迭代结构。 SM4 数据解密和数据加密的算法结构相同,只是子密码的使用顺序相反,解密子密钥是加密子密钥的逆序。

3DES示例

/**
     * 3DESECB加密
     * 
     * @param src
     *            要进行了加密的原文
     * @param key
     *            密钥 key必须是长度大于等于 3*8 = 24 位
     * @return
     * @throws Exception
     */
    public static String encryptThreeDESECB(String src, String key) throws Exception {
        DESedeKeySpec dks = new DESedeKeySpec(key.getBytes("UTF-8"));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
        SecretKey securekey = keyFactory.generateSecret(dks);

        Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, securekey);
        byte[] b = cipher.doFinal(src.getBytes("UTF-8"));

        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(b);

    }

    /**
     * 3DESECB解密
     * 
     * @param src
     *            要解密的密文字符
     * @param key
     *            解密的Key key必须是长度大于等于 3*8 = 24 位
     * @return
     * @throws Exception
     */
    public static String decryptThreeDESECB(String src, String key) throws Exception {
        // --通过base64,将字符串转成byte数组
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] bytesrc = decoder.decodeBuffer(src);
        // --解密的key
        DESedeKeySpec dks = new DESedeKeySpec(key.getBytes("UTF-8"));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
        SecretKey securekey = keyFactory.generateSecret(dks);

        // --Chipher对象解密
        Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, securekey);
        byte[] retByte = cipher.doFinal(bytesrc);

        return new String(retByte);
    }
目录
相关文章
|
1月前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
248 11
架构学习:7种负载均衡算法策略
|
1月前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
2月前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
51 6
|
2月前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
68 4
2023/11/10学习记录-C/C++对称分组加密DES
|
3月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
99 1
|
3月前
|
安全 网络协议 网络安全
【Azure 环境】从网络包中分析出TLS加密套件信息
An TLS 1.2 connection request was received from a remote client application, but non of the cipher suites supported by the client application are supported by the server. The connection request has failed. 从远程客户端应用程序收到 TLS 1.2 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。连接请求失败。
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
3月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
3月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
3月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!

热门文章

最新文章