原址(http://blog.csdn.net/nimmy/article/details/5490990)
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import javax.crypto.Cipher;
public class KeytoolPublicKeyPrivateKey {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
/* 前提:JDK已安装且正确配置环境变量
首先在D盘建立目录 test,用来存放证书库以及导出的证书文件,然后在命令行执行下列2句
下句含义:在D盘目录创建 test 密钥库,库密码 123456789 ,创建证书 test :非对称密钥,RSA
算法,key密码为qwertyuiop ,存于 test.keystore
C:\Users\Administrator> keytool -genkey -alias test -dname "CN=127.0.0.1" -keyalg RSA -keystore test -storepass 123456789 -keypass qwertyuiop
下句含义:将 test 库中的 test 导出为证书文件 test.cer ,这里可能需要将 export
C:\Users\Administrator> keytool -export -alias test -file test.cer -keystore test.keystore -storepass 123456789
证书库证书保存证书的公私钥,导出的证书文件只携带公钥*/
byte[] msg = "犯大汉天威者,虽远必诛!".getBytes("UTF8"); // 待加解密的消息
// 用证书的公钥加密
CertificateFactory cff = CertificateFactory.getInstance("X.509");
FileInputStream fis1 = new FileInputStream("d://test.cer"); // 证书文件
Certificate cf = cff.generateCertificate(fis1);
PublicKey pk1 = cf.getPublicKey(); // 得到证书文件携带的公钥
Cipher c1 = Cipher.getInstance("RSA/ECB/PKCS1Padding"); // 定义算法:RSA
c1.init(Cipher.ENCRYPT_MODE, pk1);
byte[] msg1 = c1.doFinal(msg); // 加密后的数据
// 用证书的私钥解密 - 该私钥存在生成该证书的密钥库中
FileInputStream fis2 = new FileInputStream("d://test.keystore");
KeyStore ks = KeyStore.getInstance("JKS"); // 加载证书库
//输入keystore密码就是证书的证书库密码,主密码就是证书密码
char[] kspwd = "123456789".toCharArray(); // 证书库密码
char[] keypwd = "qwertyuiop".toCharArray(); // 证书密码
ks.load(fis2, kspwd); // 加载证书
PrivateKey pk2 = (PrivateKey) ks.getKey("test", keypwd); // 获取证书私钥
fis2.close();
Cipher c2 = Cipher.getInstance("RSA/ECB/PKCS1Padding");
c2.init(Cipher.DECRYPT_MODE, pk2);
byte[] msg2 = c2.doFinal(msg1); // 解密后的数据
// 打印解密字符串 - 应显示 犯大汉天威者,虽远必诛!
System.out.println(new String(msg2, "UTF8")); // 将解密数据转为字符串
}
}
分享到:
相关推荐
公钥加密和私钥解密是一种非对称加密技术,它允许数据在不安全的环境中安全传输。本主题将深入探讨Java如何实现这种机制,以及其在客户端与服务器交互中的应用。 1. **公钥加密原理** 公钥加密是一种双钥加密系统...
在Java编程语言中,公钥和私钥加密解密是一种重要的安全技术,广泛应用于网络通信、数据传输等领域。本文将详细解析如何使用Java实现公钥和私钥的加解密操作,以及相关的关键概念和代码示例。 首先,我们要了解公钥...
这个名为"Java公钥加密私钥解密.rar"的压缩包文件包含了一个使用Java实现的公钥/私钥加密解密的示例。在这个案例中,开发者可能使用了Java的Java Cryptography Extension (JCE) 来实现RSA算法,这是一种非对称加密...
在这个示例中,"RSA加密"的压缩包可能包含了Java和C#的完整源代码,用于演示如何在两者之间实现RSA公钥加密和私钥解密的过程。开发者可以通过运行这些示例代码,理解并应用RSA加密解密技术到自己的项目中。
总结来说,RSA公钥加密私钥解密机制提供了数据安全传输的基础,结合Java和JavaScript的实现,可以在各种Web服务和应用程序中确保敏感信息的安全。正确理解和使用这些技术对于保障网络安全至关重要。
- `decrypt(byte[] ciphertext, PrivateKey privateKey)`: 使用私钥解密密文。 - `saveKeys(PublicKey publicKey, PrivateKey privateKey, String fileName)`: 保存公钥和私钥到文件。 - `loadKeys(String ...
这一对密钥有着不同的职责,公钥用于加密信息,而私钥则用于解密,两者之间存在数学上的联系,但又难以从公钥推导出私钥。 在互联网通信中,RSA算法的应用非常广泛。例如,在发送敏感信息时,如电子邮件或金融数据...
总的来说,RSA公钥加密和私钥解密是Java和Android开发中保障信息安全的重要手段,通过理解其工作原理和使用方法,开发者可以有效地保护应用程序中的敏感信息。在实际应用中,还应结合其他安全措施,如HTTPS传输、...
在这个Java RSA项目中,可能包含了一个完整的示例程序,演示如何生成公钥私钥,并进行加解密操作。这有助于理解非对称加密的工作原理,特别是在区块链等应用中,多重加密技术可能会结合RSA与其他加密方法,提供更高...
Java签名私钥加密和公钥...在理解了这些基本概念后,开发者可以在Java应用程序中实现安全的私钥加密和公钥解密功能,以保护数据的安全并验证消息的来源。这在诸如网络通信、文件传输、数字证书等领域都有着广泛的应用。
首先,RSA是一种基于大素数因子分解困难性的公钥加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出。它的核心在于一对密钥:公钥和私钥。公钥可以公开,用于加密数据;私钥则需要保密,用于解密数据...
RSA算法基于大数分解难题的原理,使用公钥加密、私钥解密的方式实现信息的加密和解密。 知识点2:Java中RSA加密解密算法的实现 在Java中,可以使用Java Cryptography Architecture(JCA)来实现RSA加密解密算法。...
发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密。由于公钥可以公开,因此发送方无需担心密钥的安全问题。 在C#环境中,我们可以使用.NET框架提供的`System.Security.Cryptography....
这个"本地证书实现数字信封加解密demo-java"项目提供了一种使用Java来实现这一技术的示例。以下是对这个项目及其相关知识点的详细说明: **数字信封:** 数字信封是一种用于安全传输数据的技术,它结合了对称加密和...
这种机制使得只有持有私钥的一方才能解密由公钥加密的数据,从而确保数据的安全性。 首先,要生成RSA密钥对,可以使用Java的`java.security.KeyPairGenerator`类。以下是一个简单的示例: ```java import java....
2. **RSA公钥加密**: 加密过程是通过接收方的公钥对原始明文进行处理。在Java中,`javax.crypto.Cipher`类用于执行加密操作。我们需要先用公钥初始化Cipher,然后将明文数据传递给Cipher进行加密,得到的密文只能...
- 非对称加密则需要分别用公钥加密和私钥解密。 6. **示例代码片段:** ```java import javax.crypto.Cipher; import java.security.Key; // 对称加密 Key key = ...; // 创建密钥 Cipher cipher = Cipher....
Java公钥加密算法RSA是一种广泛应用于网络通信中的安全技术,主要基于数学问题的难度来确保数据的安全性。RSA,由其发明者Ron Rivest、Adi Shamir和Leonard Adleman的名字首字母组成,是一种非对称加密算法,这意味...
1. **实验源码**:Java实现的RSA加密和解密的程序,包括密钥生成、加密、解密等关键函数的代码示例。 2. **实习报告**:详细记录了实验的过程、步骤以及可能遇到的问题和解决方案。报告可能涵盖了如何导入和使用Java...
Java证书的加密与解密是Java安全领域中的一个重要概念,主要涉及到数字证书、公钥加密、私钥解密以及SSL/TLS协议等知识点。在这个主题中,我们将深入探讨这些概念及其在实际应用中的使用。 首先,Java证书是用于...