理解经典加密算法

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 【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

目录
相关文章
|
Rust 算法 数据安全/隐私保护
【密码学】一文读懂XTEA加密
本篇文章,我们来看一下上一次讲过的TEA加密算法的一个升级版XTEA, 相比于TEA, XTEA的安全性显然是更高的,其中的过程要比TEA稍微复杂一点点。
1121 0
【密码学】一文读懂XTEA加密
|
19天前
|
安全 算法 Java
密码学基础知识与加密算法解析
密码学基础知识与加密算法解析
|
2月前
|
存储 安全 算法
密钥密码学(一)(4)
密钥密码学(一)
30 2
|
2月前
|
存储 安全 算法
密钥密码学(一)(1)
密钥密码学(一)
21 1
|
2月前
|
存储 算法 安全
密钥密码学(一)(2)
密钥密码学(一)
24 1
|
2月前
|
存储 人工智能 安全
密钥密码学(一)(3)
密钥密码学(一)
31 1
|
2月前
|
开发框架 算法 .NET
密钥密码学(三)(4)
密钥密码学(三)
29 0
|
2月前
|
人工智能 分布式计算 安全
【现代密码学】笔记1.2 -- 对称密钥加密、现代密码学的基本原则《introduction to modern cryphtography》现代密码学原理与协议
【现代密码学】笔记1.2 -- 对称密钥加密、现代密码学的基本原则《introduction to modern cryphtography》现代密码学原理与协议
246 0
|
算法 网络安全 数据安全/隐私保护
网络安全实验六 DES对称加密算法详解
网络安全实验六 DES对称加密算法详解
426 0
|
存储 算法 安全
【算法】快速了解各种不同的加密算法-总结
快速加密和解密:对称加密算法的加密和解密过程使用相同的密钥,因此加密和解密速度较快,适合处理大量数据。
222 0