美文网首页
iOS密码学-对称加密

iOS密码学-对称加密

作者: 沉淀纷飞 | 来源:发表于2021-08-27 00:07 被阅读0次
    截屏2021-10-14 下午8.48.51.png

      之前我们已经研究过RSA,并且RSA非对称加密非对称加密有一对公钥私钥。我们可以对数据用私钥加密用公钥解密,也能用公钥加密用私钥来解密,这就是非对称加密。那什么是对称加密对称加密有哪些呢,又有哪些使用场景呢?

    对称加密算法&模式

      对称加密就是明文通过秘钥(key)加密后得到密文,密文通过秘钥解密得到明文。但注意Hash是不是加密算法。常见对称加密算法有DES3DESAES

    • DES:数据加密标准。这种加密方式用得少,加密强度不够。
    • 3DES:使用3个秘钥,对相同的数据执行3次加密,强度增强。
    • AES:高级密码标准。
      总结:DES3DESAES的区别在于三者的加密强度不同。
      对称加密有两种应用模式,分别是ECB(Electronic Code Book)CBC(Cipher Block Chaining)
    • ECB:电子密码本模式。每一块数据,独立加密。
    • CBC:密码分组链接模式。使用一个密钥和一个初始化向量IV对数据执行加密

    终端测试指令

    加密过程

    1、加密过程是先加密,再base64编码
    2、解密过程是先base64解码,再解密

    DES加密&解密

    • 使用DES(ECB)加密
    echo -n "需要加密的字符串" | openssl enc -des-ecb -K "密钥" -nosalt | base64
    
    • 使用DES(ECB)解密
    echo -n "需要解密的字符串" | base64 -D | openssl enc -des-ecb -K "密钥" -nosalt -d
    
    • DES(CBC)加密
    echo -n "需要加密的字符串" | openssl enc -des-cbc -iv "向量" -K "密钥" -nosalt | base64
    
    • DES(CBC)解密
    echo -n "需要加密的字符串" | base64 -D | openssl enc -des-cbc -iv "向量" -K "密钥" -nosalt -d
    

    AES加密&解密

    • AES(ECB)加密
    echo -n "需要加密的字符串" | openssl enc -aes-128-ecb -K "密钥" -nosalt | base64
    
    • AES(ECB)解密
    echo -n "需要加密的字符串" | base64 -D | openssl enc -aes-128-ecb -K "密钥" -nosalt -d
    

    [图片上传失败...(image-127fb8-1629994064213)]

    • AES(CBC)加密
    echo -n "需要加密的字符串" | openssl enc -aes-128-cbc -iv "向量" -K "密钥" -nosalt | base64
    
    • AES(CBC)解密
    echo -n "需要加密的字符串" | base64 -D | openssl enc -aes-128-cbc -iv "向量" -K "密钥" -nosalt -d
    

    补充:加密跟几何图形关联,加密时增加向量,增加了破解的难度。如果加密强度比较小,生成的结果大小 也比较小。CBC的加密模式通常用于防窃听使用场景 后续的加密依赖前面的数据。

    使用终端对文件加密测试

    ECB模式

    1、终端输入vi abc.txt 创建文件并输入内容
    2、终端输入openssl enc -des-ecb -K 61626364 -nosalt -in abc.txt -out message.bin 使用DES的ECB 模式加密并输出二进制文件
    3、终端输入cat message.bin 获取二进制文件
    4、终端输入xxd message.bin 输出二进制文件
    5、终端输入openssl enc -des-ecb -K 61626364 -nosalt -d -in message.bin -out 解密message1.txt 解密二进制文件并输出解密后的文件

    CBC模式

    1、终端输入vi abc.txt 创建文件并输入内容
    2、终端输入openssl enc -des-cbc -K 61626364 -iv 010203040506 -nosalt -in abc.txt -out message.bin 使用DES的CBC模式加密并输出二进制文件
    3、终端输入cat message.bin 获取二进制文件
    4、终端输入xxd message.bin 输出二进制文件
    5、终端输入openssl enc -des-cbc -K 61626364 -iv 010203040506 -nosalt -d -in message.bin -out 解密abc.txt 解密二进制文件并输出解密后的文件


    我们将abc.txt文件内容修改比较一下ECB和CBC模式加密得到的二进制的区别

    )
    通过加密后二进制结果可以看出cbc模式只是修改位置的二进制发生了改变,ECB模式修改位置后面的二进制都发生了改变

    代码测试 源码地址


    总结:

    • ECB最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般很少用。
    • CBC明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废。

    相关文章

      网友评论

          本文标题:iOS密码学-对称加密

          本文链接:https://www.haomeiwen.com/subject/shbuiltx.html