加密:哈希,消息摘要和数字签名算法
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
小结
本文简单介绍几个加密算法,随着计算机器能力的增强,算法也在不断更新,保持关注是不错的策略。
参考实现:
- 点赞
- 收藏
- 关注作者
评论(0)