keytool 将密钥和证书储存在一个所谓的密钥仓库中。缺省的密钥仓库实现将密钥仓库实现为一个文件。
它用口令来保护私钥。
数字签名的原理
1:被发送文件采用哈希算法对原始报文进行运算,得到一个固定长度的数字串,称为报文摘要 (Message Digest),不同的报文所得到的报文摘要各异,但对相同的报文它的报文摘要却是唯一的。
2:发送方生成报文的报文摘要,用自己的私钥对摘要进行加密来形成发送方的数字签名。
3:这个数字签名将作为报文的附件和报文一起发送给接收方。
4:接收方首先从接收到的原始报文中用同样的算法计算出新的报文摘要,再用发送方的公钥对报文附件的数字签名进行解密,比较两个报文摘要,如果值相同,接收方就能确认该数字签名是发送方的。
生成证书(生成密钥库文件):
keytool -genkey -alias name1 -keyalg RSA -keystore C:\keystore
列出证书:
keytool -list -keystore C:\keystore
导出证书:
keytool -export -alias name1 -file name1.cer -keystore C:\keystore
keytool -export -alias name2 -file name2.cer -keystore C:\keystore
一、从密钥库文件中获取私钥:
FileInputStream fis = new FileInputStream(new File(密钥库文件));
// 打开keystore
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(fis, keyStorePass.toCharArray());
// 取出alias的私钥
privateKey = (KeyStore.PrivateKeyEntry) ks.getEntry(alias,new PasswordProtection(keyAliasPass.toCharArray()));
二、用私钥对需要加密的字符串进行加密操作
// 用私钥对字符串进行加密采用RSA算法
Cipher desCipher = Cipher.getInstance("RSA/ECB/NoPadding");
desCipher.init(Cipher.ENCRYPT_MODE, 从密钥库文件中获取的私钥);
// 用私钥对信息进行加密
byte[] ciphertext = desCipher.doFinal(需要加密字符串);