理解经典加密算法

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 【6月更文挑战第22天】本文介绍加密与安全哈希典型算法,包括对称加密或非对称加密,以及python实现的例子。

1 术语

同义词

            安全哈希  一般指的是 安全哈希

            消息摘要  一般指的 较旧的算法

术语:安全哈希(如SHA-256)与消息摘要(如较旧的SHA算法)

  • 对称加密:使用相同密钥加密和解密,如DES
  • 非对称加密:RSA算法,基于大质数乘积,公钥和私钥分开
  • 公钥/私钥转换:Base64编码与解码
  • 数字签名:EdDSA提供快速且安全的签名,Curve25519用于ECDH协议
  • Python3:ssl模块处理随机数和证书验证,hashlib支持多种哈希算法,base64和zlib涉及编码和较旧哈希

    Toroid托瑞德符号.png

2 对称加密

对称密钥算法(英语:Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥.

安全散列,信息摘要

    SHA-256
    SHA

3 非对称加密

  • RSA

              非对称加密算法的一种
              随意选择两个大的质数p和q,p不等于q,计算N=pq。
              根据欧拉函数,不大于N且与N互质的整数個数為(p-1)(q-1)。
              选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)。
              用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))。 (d*e)%((p-1)(q-1))=1
              将p和q的记录销毁。
              以上内容中,(N,e)是公钥,(N,d)是私钥。
    
  • 公钥对象转为String

     byte[] keyByte=(Key)publicKey.getEncoded();
     String key=Base64.getEncoder().encodeToString(keyByte); 
    
  • String 转公钥对象

     byte[] keyBytes = Base64.getDecoder().decode(key);   //衔接 先转换byte[]
     X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);        
     KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); //RSA算法      
     Key publicK = keyFactory.generatePublic(x509KeySpec);  
    
  • 私钥转String

      byte[] keyByte=(Key)privateKey.getEncoded();
      String key=Base64.getEncoder().encodeToString(keyByte); 
    
  • String转私钥

      byte[] keyBytes = Base64.getDecoder().decode(key); //先转换byte[]
      PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);        
      KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);        
      Key privateK = keyFactory.generatePrivate(pkcs8KeySpec); 
    

4 数字签名算法 EdDSA

在公钥密码学中,爱德华兹曲线数字签名算法( EdDSA ) 是一种数字签名方案,它使用基于扭曲的爱德华兹曲线的Schnorr 签名的变体。

它旨在比现有的数字签名方案更快,同时又不牺牲安全性。它由Daniel J. Bernstein、Niels Duif、Tanja Lange、Peter Schwabe 和 Bo-Yin Yang 等团队开发。
参考实现是公共域软件。

  • Curve25519

    在密码学中,Curve25519是椭圆曲线密码学(ECC)中使用的椭圆曲线,提供 128位安全性(256 位密钥大小),设计用于椭圆曲线 Diffie–Hellman (ECDH) 密钥协议方案。它是 ECC 中最快的曲线之一,并且未被任何已知专利所涵盖 。

最初的 Curve25519 论文将其定义为Diffie–Hellman (DH) 函数。Daniel J. Bernstein此后提议将名称 Curve25519 用于基础曲线,将名称X25519用于 DH 函数。

最后两个在端到端通信中,经常看到。

5 python3 的实现

  • ssl

随机数处理

    ssl.RAND_bytes(num)

返回 num 个高加密强度伪随机字节数据 RAND_status() 可被用来检查 PRNG 的状态而 RAND_add() 可被用来为 PRNG 设置随机种子。

  • 证书处理

        ssl.match_hostname(cert, hostname)
    

验证 cert (使用 SSLSocket.getpeercert() 所返回的已解码格式) 是否匹配给定的 hostname。

所应用的规则是在 RFC 2818, RFC 5280 和 RFC 6125 中描述的检查 HTTPS 服务器身份的规则。

除了 HTTPS,此函数还应当适用于各种基于 SSL 协议的服务器身份检查操作,例如 FTPS, IMAPS, POPS 等等.

大部分平台 可用的hash算法

           sha3_224(), sha3_256(), sha3_384(), sha3_512(), shake_128(), shake_256()

以字节表示的结果哈希对象的大小。

      hash.digest_size

以字节表示的哈希算法的内部块大小。

    hash.block_size
  • base64

将二进制数据编码为可打印的 ASCII 字符,以及将这种编码格式解码回二进制数据的函数.

  • zlib

较旧的哈希算法 库

    crc32
    adler32

6 小结

参考实现:

https://en.wikipedia.org/wiki/Public_domain_software

目录
相关文章
|
1月前
|
存储 安全 算法
密钥密码学(一)(4)
密钥密码学(一)
24 2
|
1月前
|
存储 安全 算法
密钥密码学(一)(1)
密钥密码学(一)
14 1
|
1月前
|
存储 算法 安全
密钥密码学(一)(2)
密钥密码学(一)
22 1
|
1月前
|
存储 人工智能 安全
密钥密码学(一)(3)
密钥密码学(一)
24 1
|
1月前
|
开发框架 算法 .NET
密钥密码学(三)(4)
密钥密码学(三)
25 0
|
1月前
|
人工智能 分布式计算 安全
【现代密码学】笔记1.2 -- 对称密钥加密、现代密码学的基本原则《introduction to modern cryphtography》现代密码学原理与协议
【现代密码学】笔记1.2 -- 对称密钥加密、现代密码学的基本原则《introduction to modern cryphtography》现代密码学原理与协议
199 0
|
11月前
|
存储 算法 安全
【算法】快速了解各种不同的加密算法-总结
快速加密和解密:对称加密算法的加密和解密过程使用相同的密钥,因此加密和解密速度较快,适合处理大量数据。
208 0
|
算法 数据安全/隐私保护
【密码学】密码学概述
每个人都有自己的秘密,如果不加密,在网上传输很容易被监听。如果涉及到金钱相关,密码泄露以后很容易造成损失。所以都会利用加密 cryptography 技术,保证信息的机密性 confidentiality。信息被加密以后变成了密文在网上传播,接收者拿到密文进行解密 cryptanalysis,解密以后就可以看到明文。对称密码 (symmetric cryptography)是指在加密和解密时使用同一密钥的方式。对应的加密方式是对称加密。目前广泛使用 AES。对称密码有多种别名,公共密钥密码(common-k
147 0
【密码学】密码学概述
|
算法 网络安全 数据安全/隐私保护
白话解释 对称加密算法 VS 非对称加密算法
对称加密算法(Symmetric-key algorithm)和非对称加密算法(asymmetric key encryption algorithm)只不过就是密码学(encryption)中的两种解密算法罢了,什么是算法,你就可以理解成为是一种规则吧,这种规则可以将信息从一种形式转变成另一种形式,不懂没关系,继续往下看。
159 0
|
并行计算 算法 搜索推荐
【密码学】 对称加密算法
在密码学中,加密算法按照实现方式可分为对称加密算法和非对称加密算法。对称加密算法指的是加密方和解密方使用相同的密钥进行加密和解密,即双方使用共同的密钥。在对称加密算法使用的过程中,数据发送方将明文数据通过密钥进行加密生成密文数据,将密文数据发送给接收方,接收方收到密文数据后,通过密钥进行解密,将其恢复成明文数据。这就要求接收方要首先知道密钥,这需要发送方先将密钥通过安全方式发给接收方,通常会使用非对称加密例如ECDH算法来传输密钥(非对称密钥会在下章讲解)。
273 0
【密码学】 对称加密算法