`
dyyaries
  • 浏览: 79969 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

RSA加密Socket传输文件、签名(一)

    博客分类:
  • Java
阅读更多

RSA加密分为公钥加密和私钥解密以及可能的数字签名。

公钥、私钥分居客户端和服务器端,分别用于加密和解密。同时,私钥还用于签名,公钥还用于验证签名。

解密加密用到JDK中java.security、javax.crypto两个包中相关的接口和类

 

1.生成密钥的代码

 

  1. SecureRandom sr = new SecureRandom();  
  2.             KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA");  
  3.             // 注意密钥大小最好为1024,否则解密会有乱码情况.   
  4.             kg.initialize(1024, sr);  
  5.             KeyPair kp = kg.generateKeyPair();  
  6.               
  7.             String privateKeyName = keyFile.substring(0,keyFile.lastIndexOf("."))+"_private"+keyFile.substring(keyFile.lastIndexOf("."));  
  8.             String publicKeyName = keyFile.substring(0,keyFile.lastIndexOf("."))+"_public"+keyFile.substring(keyFile.lastIndexOf("."));  
  9.             FileOutputStream fos = new FileOutputStream(privateKeyName);  
  10.             ObjectOutputStream oos = new ObjectOutputStream(fos);  
  11.             // 生成私钥   
  12.             oos.writeObject(kp.getPrivate());  
  13.             oos.close();  
  14.               
  15.             //生成公钥   
  16.             fos = new FileOutputStream(publicKeyName);  
  17.             oos = new ObjectOutputStream(fos);  
  18.             oos.writeObject(kp.getPublic());  
  19.             oos.close();  

 

 

 

2.加密、解密(RSA加密速度比较慢,原因是每次只能为最多117 bytes加密,加密之后为128 Bytes)

 

  1. //加密   
  2. Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");  
  3. cipher.init(Cipher.ENCRYPT_MODE, (PublicKey)getKey(keyFile,"public"));  
  4. return cipher.doFinal(text);  
  5. //加密   
  6. Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");  
  7. cipher.init(Cipher.DECRYPT_MODE, (PrivateKey)getKey(keyFile,"private"));  
  8. return cipher.doFinal(text);  

 

 

 

3.用私钥进行数字签名,用于服务器端验证客户端数据是否是正确数据。

 

  1.        public byte[] getSignature(byte[] cipherText){  
  2.     try {  
  3.         coder = new RSASecurityCoder();  
  4.         Signature sig = Signature.getInstance("SHA1withRSA");  
  5.         PrivateKey privateKey = (PrivateKey)coder.getKey(this.key, "private");  
  6.         sig.initSign(privateKey);  
  7.         sig.update(cipherText);  
  8.         return sig.sign();  
  9.     } catch (Exception e) {  
  10.         e.printStackTrace();  
  11.     }  
  12.     return null;  
  13. }  
  14.   
  15. public boolean verifySignature(byte[] cipherText,byte[] signature){  
  16.     try {  
  17.         coder = new RSASecurityCoder();  
  18.         Signature sig = Signature.getInstance("SHA1withRSA");  
  19.         PublicKey publicKey = (PublicKey)coder.getKey(this.key, "public");  
  20.         sig.initVerify(publicKey);  
  21.         sig.update(cipherText);  
  22.         return sig.verify(signature);  
  23.     } catch (Exception e) {  
  24.         e.printStackTrace();  
  25.     }  
  26.     return false;  
  27. }  

 

 

 

数字签名是在客户端进行,所用的私钥不是和用于加密的公钥成对的。

也就是说这样的通信 要在客户端保存有 服务器端的公钥和本地的私钥,而服务器端应该保存有本地的私钥和客户端的公钥。

分享到:
评论

相关推荐

    Delphi RSA 加密解密签名验签控件 RSA_Component(1.0.0.0).rar

    RSA加密演算法是一种非对称加密演算法。在公开密钥加密和电子商业中RSA被广泛使用。 典型的应用 1. 苹果App签名, iOS App 签名的原理; 2. 支付宝签名验证 ; 2. HTTPS 加密连接; 3. 程序直接用RSA+AES加密通信 ...

    C# Socket传输加密文件并解密(WinForm版)

    这是我用C#编写的基于Socket网络编程技术,在网络上传输加密文件,并对其进行数字签名,在另一端进行解密,并验证签名的一个WinForm程序,里面涉及到的加密解密算法有对称密码算法DES和非对称密码算法RSA加密解密...

    Delphi 开发的 RSA 加密解密签名验签控件演示程序 RSA_Component_Demo(1.0.0.0).rar

    RSA加密演算法是一种非对称加密演算法。在公开密钥加密和电子商业中RSA被广泛使用。这是演示程序,不包含控件 型的应用 1. 苹果App签名, iOS App 签名的原理; 2. 支付宝签名验证 ; 2. HTTPS 加密连接; 3. 程序...

    RSA文件加密传送

    综合来看,这个系统利用RSA加密保障文件的安全性,结合TCP和UDP满足不同场景的传输需求,是实现安全文件传输的一个典型示例。开发者需要对Java网络编程、加密算法以及数据传输协议有深入理解,才能有效地构建和维护...

    java模仿QQ通信实现RSA加密解密

    综上所述,"java模仿QQ通信实现RSA加密解密"项目涵盖了网络通信的基础(Socket编程),以及安全性相关的高级概念(RSA加密解密、消息摘要、数字签名)。通过这样的实践,开发者可以更好地理解和掌握网络编程和信息...

    Java实现RSA加密解密,数字证书生成与验证(有搭Socket)

    本主题涉及的关键技术包括RSA加密算法、数字证书、以及Socket编程,这些都是网络安全通信的基础。 首先,RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它的特点...

    ssl socket加密传输

    在SSL Socket加密传输中,OpenSSL的作用是生成必要的密钥材料和证书,以确保数据的机密性和完整性。 1. **生成私钥**: 使用OpenSSL生成RSA私钥,通常使用`genpkey`命令。例如,以下命令将创建一个2048位的RSA私钥...

    VC++ 毕业论文:RSA文件加密原理及代码实现

    日常应用中,有比较著名的工具包Open SSL(SSL,Security Socket Layer,是一个安全传输协议,在Internet上进行数据保护和身份确认。Open SSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang...

    socket 加密传送

    标题中的“socket 加密...综上所述,"socket 加密传送"是一个关于使用Java Socket实现安全数据传输的话题,涵盖了加密算法、数据签名、密钥管理和网络通信协议等多个方面,对于开发安全的网络应用具有重要的实践价值。

    文件传输的签名与验证程序

    本文主要介绍了一种基于RSA和MD5算法的文件传输签名与验证系统,利用Java语言和Winsock通信协议实现。以下将详细阐述这个系统的设计原理和关键组成部分。 首先,数字签名的核心是RSA算法,这是一种非对称加密算法,...

    Openssl给文件传输加密

    例如,`openssl enc`命令可用于对文件进行加密,`openssl rsautl`可用于处理RSA加密和解密。同时,`openssl pkeyutl`也可以用于非对称加密操作。具体的命令格式和参数需要根据实际情况调整。 6. **SSLClient**: ...

    基于java的类PGP文件加密传输系统

    总的来说,基于Java的类PGP文件加密传输系统利用了Java的安全特性,如加密库和数字签名,实现了类似PGP的文件加密、签名和传输功能,确保了数据在传输过程中的隐私和完整性。通过这样的系统,用户可以更安心地进行...

    Socket_Tcp.zip

    通过这种方式,"Socket_Tcp.zip"中的程序展示了如何利用C++、TCP Socket、RSA加密和MD5摘要来实现安全的文件传输,这对于任何需要进行安全数据交换的系统都具有很高的参考价值。这样的实现不仅保证了文件内容的安全...

    带有RSA的MFC加密聊天软件

    在RSA加密的基础上,SOCKET可以实现安全的数据传输。 在项目中,"SecureIM.doc"可能是设计文档,详细描述了软件的设计思路、架构和实现方法,包括RSA算法的实现、MFC框架的应用以及SOCKET编程的细节。而"SecureIM...

    基于JAVA的文件加密传输系统的设计与实现.pdf

    - **加密算法**:文中虽然未明确指出具体的加密算法,但考虑到系统需要支持文件的加密传输,可以推测可能采用了AES、RSA等加密算法。这些算法既可以保证数据的安全性,又能够满足文件传输的需求。 - **数字签名**:...

    rsa算法实现系统

    1. **RSA加密与解密**:RSA的加解密过程基于大数因子分解的困难性。加密时,用户使用接收者的公钥对明文进行加密;解密时,接收者使用自己的私钥对密文进行解密。这种机制确保了即使公钥被截获,也无法轻易解密信息...

    mongodb开启SSL传输加密

    在现代网络安全环境中,确保数据在传输过程中的安全性至关重要,SSL(Secure Socket Layer)或其更新版本TLS(Transport Layer Security)正是实现这一目标的关键技术。SSL/TLS可以提供端到端的数据加密,防止中间人...

    RSA-TBOS数字签密方案分析及其Java实现技术.pdf

    "RSA-TBOS数字签密方案分析及其Java实现技术" 本文主要关注数字签名和数字...RSA-TBOS 数字签密方案是一种高效的数字签名和数字加密方案,能够确保数据的安全传输。Java 实现技术使得该方案能够在实际应用中得以实现。

    VC++毕业论文:RSA文件加密原理及代码实现

    日常应用中,有比较著名的工具包Open SSL(SSL,Security Socket Layer,是一个安全传输协议,在Internet上进行数据保护和身份确认。Open SSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang...

    浅析RSA密码算法在物联网数据传输中的应用.pdf

    尤其在3G网络环境下,由于其开放性的无线链路特性,数据安全风险增大,RSA加密提供了一种有效保护手段。 2. 身份验证:在物联网系统中,设备之间的身份验证是保障通信安全的重要环节。RSA算法可以用于生成数字签名...

Global site tag (gtag.js) - Google Analytics