• 安全加密算法


    MD5 算法
    MD5 消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个 128 位(16 字节)的散列值(hash value),用于确保信息传输完整一致。MD5 由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于 1992 年公开,用以取代 MD4 算法。
    SHA1 算法
    SHA1 又被称为安全哈希算法(Secure Hash Algorithm)对于长度小于 2^64 位的消息,SHA1 会产生一个 160 位的消息摘要,比 MD5 多了 32 位,更安全,但其处理速度比 MD5 慢。
    使用 openssl dgst、md5sun 和 sha1sum 来计算一个文件的 Hash 值。
    MD5

    SHA1

    DES 全称为 Data Encryption Standard,又称为美国数据加密标准,是一种使用密钥加密的块算法,是 1972 年美国 IBM 公司研制的对称密码体制加密算法。

    DES 加密算法是对密钥进行保密,而公开算法,包括加密和解密算法,只有掌握了和发送方相同密钥的人才能解读由 DES 加密算法加密的密文数据。

    可以使用 man enc 查看此命令的帮助信息。(前面提到的 man openssl 也可以查看帮助手册,但是里面有太多我们暂时不需要的信息,使用 man enc 可以只查看 openssl enc 这个子命令的帮助信息)

    其中的内容非常多,我们选择其中几个选项给大家讲解一下。

    -in filename:指定要加密的文件存放路径
    -out filename:指定加密后的文件存放路径
    -e:加密,这是一个默认选项,可以不指定;
    -d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致;
    -ciphername:指定加密方式。

    AES 算法简介
    AES 加解密
    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。它比 DES 速度更快,更安全,被用来替代 DES。
    我们经常会听到 AES128,AES192,AES256 ,其实意思是支持不同长度密钥的 AES 算法。


    encode

    decode

    cbc 代表的是工作模式,在解密时也要用相同的工作模式解密,不然会报错,如下图:

    用 openssl enc --help 查看帮助,可以看到如下部分内容:

    图片描述

    可以看到对于 aes-128 而言,有 cfb、cfb1、ctr、ofb、cbc、ecb 等工作模式。

    可以使用下面的命令将每个工作模式都试一试,对比看一下有什么不同。

    只列出了五种工作模式,其他的可以类比

    openssl enc -aes-128-cfb -in aes.txt -out cfb.bin

    openssl enc -aes-128-cfb1 -in aes.txt -out cfb1.bin

    openssl enc -aes-128-ctr -in aes.txt -out ctr.bin

    openssl enc -aes-128-cbc -in aes.txt -out cbc.bin

    openssl enc -aes-128-ecb -in aes.txt -out ecb.bin
    copy
    用 cat 查看加密过后的密文,比如使用 cfb 工作模式后加密的文件,其查看方式为 cat cfb.bin。
    通过 openssl enc 子命令对测试文件进行 AES 加解密,理解了对称加密特点以及 AES 加密的安全性,AES 比 DES 更加安全,并且支持不同长度的密钥。我们之前说过衡量对称算法优劣的主要尺度是其密钥的长度。

    RSA 算法简介
    非对称加解密过程
    RSA 加密算法是一种非对称加密算法。在公开密钥加密和电子商业中 RSA 被广泛使用。RSA 是 1977 年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。

    下图表示非对称加解密过程,通过下图试着回忆一下之前所学的内容。

    接下来就是使用 openssl 生成一个 2048 位的私钥 private.pem:
    openssl genrsa -out private.pem 2048
    来查看一下私钥的内容:

    根据私钥生成公钥 public.pem :
    openssl rsa -in private.pem -pubout -out public.pem
    来查看一下公钥的内容:

    方式一:公钥加密,私钥解密

    用公钥加密
    用公钥对 message.txt 加密,输出密文到 enc.txt 文件中:

    openssl rsautl -encrypt -in message.txt -pubin -inkey public.pem -out enc.txt
    copy
    接下来可以使用 cat enc.txt 来看一下加密之后的信息长什么样,结果如下图:

    用私钥解密
    用私钥对 enc.txt 进行解密,输出到 dec.txt 文件中:

    openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
    copy
    接下来可以使用 cat dec.txt 来看一下解密之后的信息长什么样,结果如下图:

    用一幅图对这个过程进行总结:

    方式二:私钥加密,公钥解密
    用私钥签名
    用私钥 private.pem 对 message.txt 进行签名,输出到 sign.bin 中:

    openssl rsautl -sign -in message.txt -inkey private.pem -out sign.bin
    copy

    用公钥验证
    用公钥 public.pem 对签名 sign.bin 进行验证,输出到 dec.txt 中:

    openssl rsautl -verify -in sign.bin -pubin -inkey public.pem -out dec.txt

  • 相关阅读:
    v-for给img的src动态赋值问题
    关于vue+axios上传文件的踩坑分析
    关于nth-of-type和nth-child的关系
    关于fetch
    关于移动端适配
    golang变量作用域问题-避免使用全局变量
    grpc-gateway:grpc转换为http协议对外提供服务
    google的grpc在golang中的使用
    golang中的rpc包用法
    homebrew常用命令
  • 原文地址:https://www.cnblogs.com/qianxiaoruofeng/p/13738824.html
Copyright © 2020-2023  润新知