zoukankan      html  css  js  c++  java
  • 常用加密、编码原理及go语言实现

    1.加密算法

    1.1Aes

    对称加密:加解密用同一个密钥

    应用场景:VPN或代理加密通信

    分组密码:把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。

    在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,如下表所示

    AES 密钥长度(32位) 分组长度(32位) 加密轮数
    AES-128 4 4 10
    AES-192 6 4 12
    AES-256 8 4 14

     对称加密模式

    ECB(电码本模式Electronic Codebook Book)

     这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密。

    CBC(密码分组链接模式Cipher Block Chaining)

    这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。

    OFB(输出反馈模式Output FeedBack)

    CFB(密码反馈模式Cipher FeedBack)

    CTR(计算器模式Counter )

    1.2 HMACSHA

    Sha系列算法

    常用的如Sha1、Sha256等。单向散列哈希算法。

    Sha1已被破解。

    MD5的摘要的长度尽128bit,SHA-1摘要长度160bit。多出32bit意味着什么呢?不同明文的碰撞几率降低了2^32 = 324294967296倍。

    SHA-256:可以生成长度256bit的信息摘要。

    SHA-224:SHA-256的“阉割版”,可以生成长度224bit的信息摘要。

    信息摘要越长,发生碰撞的几率就越低,破解的难度就越大。但同时,耗费的性能和占用的空间也就越高。

    SHA算法的底层原理类似Md5,只是摘要分段和处理细节不同。

    HMAC算法

    引入了密钥,使用单向散列函数来构造消息认证的方法

    1.3 Md5

    单向散列哈希算法

    应用场景:生成信息的摘要,校验数据的完整性;生成唯一ID;存储密码

     MD5、SHA256 等已经不在安全,特别是直接使用 MD5、SHA256等单向散列函数是很不推荐的,最好的方式是在使用 单向散列函数处理之前对明文进行 “加盐处理,这样再限定一下密码长度跟复杂度

    1.4 Rsa

    非对称加密:加解密用两个密钥,公钥加密数据,私钥解密数据。

    应用场景:密钥交换,证书等场景。

    单纯的使用 对称加密(如:AES) 的来加密两者传输中,秘钥的传输是一个问题,一旦遭到网络监听,这个秘钥就没有存在的意义了。

    单纯的用非对称加密虽然解决了监听问题,但是比较耗资源,对于一个访问量比较大的web服务来说,是不推荐的。

    对称加密传输数据,非对称加密传输对称加密密钥。

    "crypto/rsa" --加解密算法
     "crypto/x509"--字节/字符串密钥解析->rsa的密钥指针
     "encoding/pem"--perm格式校验解析
    crypto/x509:x509包解析X.509编码的证书和密钥
    encoding/pem:pem包实现了PEM数据编码(源自保密增强邮件协议)。目前PEM编码主要用于TLS密钥和证书。

    2.编码

    2.1 Base64编码

    MD5原理及应用

    AES五种加密模式

    分组填充模式

  • 相关阅读:
    左右下划线,中间文字
    sql语言动词
    SQL语言的四个组成部分
    MySQL执行一条查询语句的内部执行过程
    07 | 行锁功过:怎么减少行锁对性能的影响?
    06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
    05 | 深入浅出索引(下)
    04 | 深入浅出索引(上)
    03 | 事务隔离:为什么你改了我还看不见?
    02 | 日志系统:一条SQL更新语句是如何执行的?
  • 原文地址:https://www.cnblogs.com/mbaymax/p/15341502.html
Copyright © 2011-2022 走看看