JWT 签名算法 HS256、RS256 及 ES256 及密钥生成
签名算法
介绍具体的 JWT 签名算法前,先解释一下签名、摘要/指纹、加密这几个名词的含义:
- 数字签名(Digital Signature): 就和我们日常办理各种手续时需要在文件上签上你自己的名字一样,数字签名的主要用途也是用于身份认证。
- 更准确的讲,数字签名可保证数据的三个特性:真实性(未被伪造)、完整性(不存在缺失)、不可否认性(确实是由你本人认可并签名)
- 数字摘要(digest)/数字指纹(fingerprint): 指的是数据的 Hash 值。
- 加密算法:这个应该不需要解释,就是对数据进行加密。。
数字签名的具体实现,通常是先对数据进行一次 Hash 摘要(SHA1/SHA256/SHA512 等),然后再使用非对称加密算法(RSA/ECDSA 等)的私钥对这个摘要进行加密,这样得到的结果就是原始数据的一个签名。