RSA加密分为公钥加密和私钥解密以及可能的数字签名。
公钥、私钥分居客户端和服务器端,分别用于加密和解密。同时,私钥还用于签名,公钥还用于验证签名。
解密加密用到JDK中java.security、javax.crypto两个包中相关的接口和类
1.生成密钥的代码
- SecureRandom sr = new SecureRandom();
-
KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA");
-
-
kg.initialize(1024, sr);
- KeyPair kp = kg.generateKeyPair();
-
-
String privateKeyName = keyFile.substring(0,keyFile.lastIndexOf("."))+"_private"+keyFile.substring(keyFile.lastIndexOf("."));
-
String publicKeyName = keyFile.substring(0,keyFile.lastIndexOf("."))+"_public"+keyFile.substring(keyFile.lastIndexOf("."));
-
FileOutputStream fos = new FileOutputStream(privateKeyName);
-
ObjectOutputStream oos = new ObjectOutputStream(fos);
-
- oos.writeObject(kp.getPrivate());
- oos.close();
-
-
-
fos = new FileOutputStream(publicKeyName);
-
oos = new ObjectOutputStream(fos);
- oos.writeObject(kp.getPublic());
- oos.close();
2.加密、解密(RSA加密速度比较慢,原因是每次只能为最多117 bytes加密,加密之后为128 Bytes)
-
-
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
-
cipher.init(Cipher.ENCRYPT_MODE, (PublicKey)getKey(keyFile,"public"));
-
return cipher.doFinal(text);
-
-
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
-
cipher.init(Cipher.DECRYPT_MODE, (PrivateKey)getKey(keyFile,"private"));
-
return cipher.doFinal(text);
3.用私钥进行数字签名,用于服务器端验证客户端数据是否是正确数据。
- public byte[] getSignature(byte[] cipherText){
-
try {
-
coder = new RSASecurityCoder();
-
Signature sig = Signature.getInstance("SHA1withRSA");
-
PrivateKey privateKey = (PrivateKey)coder.getKey(this.key, "private");
- sig.initSign(privateKey);
- sig.update(cipherText);
-
return sig.sign();
-
} catch (Exception e) {
- e.printStackTrace();
- }
-
return null;
- }
-
-
public boolean verifySignature(byte[] cipherText,byte[] signature){
-
try {
-
coder = new RSASecurityCoder();
-
Signature sig = Signature.getInstance("SHA1withRSA");
-
PublicKey publicKey = (PublicKey)coder.getKey(this.key, "public");
- sig.initVerify(publicKey);
- sig.update(cipherText);
-
return sig.verify(signature);
-
} catch (Exception e) {
- e.printStackTrace();
- }
-
return false;
- }
数字签名是在客户端进行,所用的私钥不是和用于加密的公钥成对的。
也就是说这样的通信 要在客户端保存有 服务器端的公钥和本地的私钥,而服务器端应该保存有本地的私钥和客户端的公钥。
分享到:
相关推荐
RSA加密演算法是一种非对称加密演算法。在公开密钥加密和电子商业中RSA被广泛使用。 典型的应用 1. 苹果App签名, iOS App 签名的原理; 2. 支付宝签名验证 ; 2. HTTPS 加密连接; 3. 程序直接用RSA+AES加密通信 ...
RSA加密演算法是一种非对称加密演算法。在公开密钥加密和电子商业中RSA被广泛使用。这是演示程序,不包含控件 型的应用 1. 苹果App签名, iOS App 签名的原理; 2. 支付宝签名验证 ; 2. HTTPS 加密连接; 3. 程序...
这是我用C#编写的基于Socket网络编程技术,在网络上传输加密文件,并对其进行数字签名,在另一端进行解密,并验证签名的一个WinForm程序,里面涉及到的加密解密算法有对称密码算法DES和非对称密码算法RSA加密解密...
综合来看,这个系统利用RSA加密保障文件的安全性,结合TCP和UDP满足不同场景的传输需求,是实现安全文件传输的一个典型示例。开发者需要对Java网络编程、加密算法以及数据传输协议有深入理解,才能有效地构建和维护...
综上所述,"java模仿QQ通信实现RSA加密解密"项目涵盖了网络通信的基础(Socket编程),以及安全性相关的高级概念(RSA加密解密、消息摘要、数字签名)。通过这样的实践,开发者可以更好地理解和掌握网络编程和信息...
本主题涉及的关键技术包括RSA加密算法、数字证书、以及Socket编程,这些都是网络安全通信的基础。 首先,RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它的特点...
在SSL Socket加密传输中,OpenSSL的作用是生成必要的密钥材料和证书,以确保数据的机密性和完整性。 1. **生成私钥**: 使用OpenSSL生成RSA私钥,通常使用`genpkey`命令。例如,以下命令将创建一个2048位的RSA私钥...
日常应用中,有比较著名的工具包Open SSL(SSL,Security Socket Layer,是一个安全传输协议,在Internet上进行数据保护和身份确认。Open SSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang...
标题中的“socket 加密...综上所述,"socket 加密传送"是一个关于使用Java Socket实现安全数据传输的话题,涵盖了加密算法、数据签名、密钥管理和网络通信协议等多个方面,对于开发安全的网络应用具有重要的实践价值。
总的来说,基于Java的类PGP文件加密传输系统利用了Java的安全特性,如加密库和数字签名,实现了类似PGP的文件加密、签名和传输功能,确保了数据在传输过程中的隐私和完整性。通过这样的系统,用户可以更安心地进行...
本文主要介绍了一种基于RSA和MD5算法的文件传输签名与验证系统,利用Java语言和Winsock通信协议实现。以下将详细阐述这个系统的设计原理和关键组成部分。 首先,数字签名的核心是RSA算法,这是一种非对称加密算法,...
例如,`openssl enc`命令可用于对文件进行加密,`openssl rsautl`可用于处理RSA加密和解密。同时,`openssl pkeyutl`也可以用于非对称加密操作。具体的命令格式和参数需要根据实际情况调整。 6. **SSLClient**: ...
通过这种方式,"Socket_Tcp.zip"中的程序展示了如何利用C++、TCP Socket、RSA加密和MD5摘要来实现安全的文件传输,这对于任何需要进行安全数据交换的系统都具有很高的参考价值。这样的实现不仅保证了文件内容的安全...
在RSA加密的基础上,SOCKET可以实现安全的数据传输。 在项目中,"SecureIM.doc"可能是设计文档,详细描述了软件的设计思路、架构和实现方法,包括RSA算法的实现、MFC框架的应用以及SOCKET编程的细节。而"SecureIM...
- **加密算法**:文中虽然未明确指出具体的加密算法,但考虑到系统需要支持文件的加密传输,可以推测可能采用了AES、RSA等加密算法。这些算法既可以保证数据的安全性,又能够满足文件传输的需求。 - **数字签名**:...
1. **RSA加密与解密**:RSA的加解密过程基于大数因子分解的困难性。加密时,用户使用接收者的公钥对明文进行加密;解密时,接收者使用自己的私钥对密文进行解密。这种机制确保了即使公钥被截获,也无法轻易解密信息...
在现代网络安全环境中,确保数据在传输过程中的安全性至关重要,SSL(Secure Socket Layer)或其更新版本TLS(Transport Layer Security)正是实现这一目标的关键技术。SSL/TLS可以提供端到端的数据加密,防止中间人...
"RSA-TBOS数字签密方案分析及其Java实现技术" 本文主要关注数字签名和数字...RSA-TBOS 数字签密方案是一种高效的数字签名和数字加密方案,能够确保数据的安全传输。Java 实现技术使得该方案能够在实际应用中得以实现。
日常应用中,有比较著名的工具包Open SSL(SSL,Security Socket Layer,是一个安全传输协议,在Internet上进行数据保护和身份确认。Open SSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang...
尤其在3G网络环境下,由于其开放性的无线链路特性,数据安全风险增大,RSA加密提供了一种有效保护手段。 2. 身份验证:在物联网系统中,设备之间的身份验证是保障通信安全的重要环节。RSA算法可以用于生成数字签名...