加密:哈希,消息摘要和数字签名算法

举报
码乐 发表于 2023/12/21 09:27:13 2023/12/21
【摘要】 1 简介和术语同义词整理 安全哈希 一般指的是 安全哈希 消息摘要 一般指的 较旧的算法 2 加密对称加密对称密钥算法(英语:Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥.安全散列,信息摘要 SHA-256 SHA非对称加密RSA...

1 简介和术语

同义词整理

            安全哈希  一般指的是 安全哈希
	
            消息摘要  一般指的 较旧的算法

2 加密

对称加密

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

安全散列,信息摘要

    SHA-256
	SHA

非对称加密

  • 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); 
    
  • 数字签名算法 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 函数。

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

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

小结

本文简单介绍几个加密算法,随着计算机器能力的增强,算法也在不断更新,保持关注是不错的策略。

参考实现:

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

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。