Jar 包签名

1,加密、摘要和数字签名(1)公钥加密算法

关于公钥加密算法,参考维基百科词条 Public-key cryptography。

公钥加密算法又称为非对称密钥加密算法,因为它包含一个公钥-私钥对,称为key pair。即 key pair = private key + public key。

从功能上说,香港空间,两个key作用相同,用一个key加密的消息,只能用另一个key解密,反之亦然。两个 key 的区别只在于谁拥有/知道它:private key 只有 key pair 的生成者知道,public key 则公开。key pair 的另一个特性是无法从一个 key 推算出另一个 key。

常用公钥加密算法是RSA和DSA。(TODO: 区别?)

(2)数字签名

关于数字签名,参考维基百科词条 Digital signature。

数字签名算法是基于公钥加密算法的,美国服务器,其过程是:

由于 private key 无法伪造或从 public key 推算出,因此,消息发送者必为 private key 拥有者,由此确保了消息来源的真实性(Authentication)和不可否认性(Non-repudiation)。如果消息在发送过程中损坏或被篡改,进行摘要后Hash值必定不一致,数字签名验证无法通过,由此确保了消息内容的完备性(Integrity)。

(3)消息摘要

关于消息摘要,参考维基百科词条 Cryptographic hash function。

消息摘要算法是使用一个Hash函数对任意长度的输入数据进行处理,香港虚拟主机,输出固定长度的数据。输出数据称为消息摘要。无法从消息摘要倒推出消息内容。常用的消息摘要算法是 MD5 和 SHA-1。(TODO: 区别?)

2,Jar 包签名和验证

对Jar包的数字签名和验证过程和前面描述的数字签名原理和过程一致。Jar包是待发送的消息,经过签名后,Jar包内置入了数字签名和public key,验证者可以使用这两项数据进行验证。

实际上,经签名的Jar包内包含了以下内容:

(1)使用 keytool 和 jarsigner 工具进行 Jar 包签名和验证

JDK 提供了 keytool 和 jarsigner 两个工具用来进行 Jar 包签名和验证。

keytool 用来生成和管理 keystore。keystore 是一个数据文件,存储了 key pair 有关的2种数据:private key 和 certificate,而 certificate 包含了 public key。整个 keystore 用一个密码进行保护,keystore 里面的每一对 key pair 单独用一个密码进行保护。每对 key pair 用一个 alias 进行指定,alias 不区分大小写。

keytool 支持的算法是:

如果公钥算法为 DSA,则摘要算法使用 SHA-1。这是默认的如果公钥算法为 RSA,则摘要算法采用 MD5

jarsigner 读取 keystore,为 Jar 包进行数字签名。jarsigner 也可以对签名的 Jar 包进行验证。

下面以 JDK 中的 tools.jar 包为例,使用 keytool 和 jarsigner 对它进行签名和验证。

第1步:用 keytool 生成 keystore

执行以下命令,生成文件名为 test.ks 的 keystore,并生成 alias 为 testkey 的 key pair

keytool -keystore test.ks -genkey -alias testkey我是在旅行吗?也许是的。

Jar 包签名

相关文章:

你感兴趣的文章:

标签云: