- 浏览: 369411 次
- 性别:
- 来自: 中国山东
文章分类
最新评论
-
ChinaEstone:
再举一个例子:RunnableImpl impl = new ...
这段代码执行任务时启动了几个线程? -
ChinaEstone:
只有一个timer的线程,以前理解的时候任务runable接口 ...
这段代码执行任务时启动了几个线程? -
nocb:
你好,请问有没有 darkstar的 ios android ...
SGS 0.9.7 协议解析 -
diyunpeng:
这个我得学习一下。
Linux下vi的用法 -
tantan:
mina 多并发实时传输,
只能建立一个连接传输,如何解决呢
...
深入理解Apache Mina (1)---- Mina的几个类
package author.estone.rsa; import javax.crypto.Cipher; import java.security.*; import java.security.spec.RSAPublicKeySpec; import java.security.spec.RSAPrivateKeySpec; import java.security.spec.InvalidKeySpecException; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.io.*; import java.math.BigInteger; /** * RSA 工具类。提供加密,解密,生成密钥对等方法。 * */ public class RSAUtil { /** * 生成密钥对 * * @return KeyPair * @throws */ public static KeyPair generateKeyPair() { try { KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider()); final int KEY_SIZE = 1024;// 没什么好说的了,这个值关系到块加密的大小,可以更改,但是不要太大,否则效率会低 keyPairGen.initialize(KEY_SIZE, new SecureRandom()); KeyPair keyPair = keyPairGen.genKeyPair(); return keyPair; } catch (Exception e) { return null; } } /** * 生成公钥 * * @param modulus * @param publicExponent * @return RSAPublicKey * @throws */ public static RSAPublicKey generateRSAPublicKey(byte[] modulus, byte[] publicExponent) { KeyFactory keyFac = null; try { keyFac = KeyFactory.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider()); } catch (NoSuchAlgorithmException ex) { } RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger( modulus), new BigInteger(publicExponent)); try { return (RSAPublicKey) keyFac.generatePublic(pubKeySpec); } catch (InvalidKeySpecException ex) { return null; } } /** * 生成私钥 * * @param modulus * @param privateExponent * @return RSAPrivateKey * @throws */ public static RSAPrivateKey generateRSAPrivateKey(byte[] modulus, byte[] privateExponent) { KeyFactory keyFac = null; try { keyFac = KeyFactory.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider()); } catch (NoSuchAlgorithmException ex) { } RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(new BigInteger( modulus), new BigInteger(privateExponent)); try { return (RSAPrivateKey) keyFac.generatePrivate(priKeySpec); } catch (InvalidKeySpecException ex) { return null; } } /** * 加密 * * @param key * 加密的密钥 * @param data * 待加密的明文数据 * @return 加密后的数据 * @throws */ public static byte[] encrypt(Key key, byte[] data) { try { Cipher cipher = Cipher.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider()); cipher.init(Cipher.ENCRYPT_MODE, key); int blockSize = cipher.getBlockSize();// 获得加密块大小,如:加密前数据为128个byte,而key_size=1024 // 加密块大小为127 // byte,加密后为128个byte;因此共有2个加密块,第一个127 // byte第二个为1个byte int outputSize = cipher.getOutputSize(data.length);// 获得加密块加密后块大小 int leavedSize = data.length % blockSize; int blocksSize = leavedSize != 0 ? data.length / blockSize + 1 : data.length / blockSize; byte[] raw = new byte[outputSize * blocksSize]; int i = 0; while (data.length - i * blockSize > 0) { if (data.length - i * blockSize > blockSize) cipher.doFinal(data, i * blockSize, blockSize, raw, i * outputSize); else cipher.doFinal(data, i * blockSize, data.length - i * blockSize, raw, i * outputSize); // 这里面doUpdate方法不可用,查看源代码后发现每次doUpdate后并没有什么实际动作除了把byte[]放到ByteArrayOutputStream中,而最后doFinal的时候才将所有的byte[]进行加密,可是到了此时加密块大小很可能已经超出了OutputSize所以只好用dofinal方法。 i++; } return raw; } catch (Exception e) { return null; } } /** * 解密 * * @param key * 解密的密钥 * @param raw * 已经加密的数据 * @return 解密后的明文 * @throws */ public static byte[] decrypt(Key key, byte[] raw) { try { Cipher cipher = Cipher.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider()); cipher.init(cipher.DECRYPT_MODE, key); int blockSize = cipher.getBlockSize(); ByteArrayOutputStream bout = new ByteArrayOutputStream(64); int j = 0; while (raw.length - j * blockSize > 0) { bout.write(cipher.doFinal(raw, j * blockSize, blockSize)); j++; } return bout.toByteArray(); } catch (Exception e) { return null; } } /** * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // 读取要加密的文件 File file = new File("d:/test.html"); FileInputStream in = new FileInputStream(file); ByteArrayOutputStream bout = new ByteArrayOutputStream(); byte[] tmpbuf = new byte[1024]; int count = 0; while ((count = in.read(tmpbuf)) != -1) { bout.write(tmpbuf, 0, count); tmpbuf = new byte[1024]; } in.close(); // 对数据文件进行加密处理 byte[] orgData = bout.toByteArray(); KeyPair keyPair = RSAUtil.generateKeyPair(); RSAPublicKey pubKey = (RSAPublicKey) keyPair.getPublic(); RSAPrivateKey priKey = (RSAPrivateKey) keyPair.getPrivate(); byte[] pubModBytes = pubKey.getModulus().toByteArray(); byte[] pubPubExpBytes = pubKey.getPublicExponent().toByteArray(); byte[] priModBytes = priKey.getModulus().toByteArray(); byte[] priPriExpBytes = priKey.getPrivateExponent().toByteArray(); RSAPublicKey recoveryPubKey = RSAUtil.generateRSAPublicKey(pubModBytes, pubPubExpBytes); RSAPrivateKey recoveryPriKey = RSAUtil.generateRSAPrivateKey( priModBytes, priPriExpBytes); // 对文件进行加密 byte[] raw = RSAUtil.encrypt(priKey, orgData); file = new File("encrypt_result.dat"); OutputStream out = new FileOutputStream(file); out.write(raw); out.close(); // 对文件进行解密 byte[] data = RSAUtil.decrypt(recoveryPubKey, raw); file = new File("decrypt_result.html"); out = new FileOutputStream(file); out.write(data); out.flush(); out.close(); } }
code from :
http://code.google.com/p/jsc4/source/browse/trunk/JSC4/src/eticketApplet/RSAUtil.java?spec=svn35&r=35
发表评论
-
线性同余随机算法实现
2014-09-24 15:02 677package com.wistone.server.cor ... -
Java Pass By Value Example
2014-05-03 09:32 762package author.estone.java; ... -
How to use git in eclipse ?
2014-04-20 11:03 716when we use git in eclipse, w ... -
这段代码执行任务时启动了几个线程?
2013-08-07 10:16 1202import java.util.Timer; impor ... -
LookupError: unknown encoding 'ms936'
2013-08-05 12:42 1465Jython调用print方法,报错如下LookupErr ... -
Nginx反向代理不跳转(nginx/java/tomcat/jsp)
2013-03-19 17:48 3393<% String path = request.g ... -
Eclipse Indigo Maven SCM SVN
2012-12-20 23:06 1078Following these steps: 1) Ins ... -
驼峰格式和下划线格式字符串相互转换
2012-11-21 11:57 3577/** * @param strs * ... -
延迟5s的另外一种写法
2012-08-07 14:24 768int seconds = 5; l ... -
Use CodeMoel Generate Java Source Code
2012-06-06 20:21 1660package samples; // Example: ... -
找jar的两个网站
2012-05-26 02:00 781finjar.com docjar.com -
Tomcat开启JMX功能
2011-11-15 00:20 1396使用Jconsole或者VisualVM监控Tomcat的JV ... -
Facebook中FBML和IFrame的工作原理
2010-05-19 11:52 3281在Canvas Page中,用户创建的应用需要使用facebo ... -
数据库为什么要添加连接池
2010-03-03 16:55 1540今天在学习kauklahti的时 ... -
分析使用Jdbc连接数据库时用到的对象
2010-03-03 16:54 1132先看有上文给出的一个连接msyql的Jdbc的源码。 //- ... -
一行“神奇”的代码
2010-02-02 15:15 936最近在复习闫宏的 ... -
老生常谈--return和Collection中的回值问题
2010-01-25 17:35 0关于return返回值的问题和Collection中存放引用的 ... -
Pushlet--Web Comet FrameWork
2010-01-06 10:51 1095Server-side notification to b ... -
一个Tomcat中文文档网站
2009-12-21 15:13 2739这里有中文版的Tomcat的文档http://www.jaxm ... -
Java中圆周率的表示方法
2009-11-27 09:54 7905JDK中使用的静态的圆周率:Math.PI 自定义的圆周 ...
相关推荐
本文将深入探讨RSA加密和解密的基础知识以及如何在Unity中实现这一功能。 首先,RSA加密的核心原理是基于大整数因子分解的困难性。它生成一对密钥:公钥和私钥。公钥可以公开,用于加密;而私钥必须保密,用于解密...
- RSA加密过程是不可逆的,因此在使用前需确认加密和解密的对象匹配。 在给出的链接中(https://blog.csdn.net/qq_37835111/article/details/87358779),作者提供了一个具体的示例,演示了如何在C# .NET环境下...
在本压缩包中,提供了RSA加密解密的工具——PRO_TDES_RSA.exe,这是一个执行程序,能够帮助用户对文件进行加密和解密操作。结合"RSATool工具简易操作指南 .doc",用户可以详细了解如何使用这个工具来保护他们的敏感...
本篇文章将深入探讨C#如何实现RSA加密解密,并结合Winform界面进行演示。 **1. RSA算法基础** RSA算法基于数论原理,包括大数因子分解的困难性。它包含两个密钥:公钥和私钥。公钥可以公开,用于加密;私钥必须...
RSA算法是一种非对称加密...总的来说,这个压缩包提供了一套完整的RSA加密解密解决方案,涵盖了理论知识、C语言实现以及用户交互的界面设计。对于学习RSA算法和实践加密应用的开发者来说,这是一个非常有价值的资源。
总的来说,这个项目展示了如何在C#中使用`System.Numerics.BigInteger`实现RSA加密算法,同时提供了私钥加密和公钥解密的功能,确保了数据的安全性。为了实际应用,你需要理解并掌握RSA算法的原理,以及如何在.NET...
本例中的Project1.exe可能是一个Delphi编译的示例应用程序,展示了如何在Delphi环境中使用RSA加密和解密。这个程序应该演示了如何生成RSA密钥对,使用公钥加密数据,然后使用私钥解密,反之亦然。在实际应用中,公钥...
RSA算法是一种非对称加密技术,它在信息安全领域扮演着重要的角色。非对称加密与对称加密的主要区别在于,它使用两个不同的密钥:一个...开发者可以通过运行这些示例代码,理解并应用RSA加密解密技术到自己的项目中。
本资源提供了RSA加密解密的源码,适用于学习和理解RSA算法的工作原理及其实现。 首先,RSA算法的核心原理基于大数的因式分解困难性。它由三位科学家Rivest、Shamir和Adleman于1977年提出,因此得名RSA。该算法包括...
通常C#使用xml格式的密钥文件,不能使用Linux下的公钥和私钥pem文件。...本源码直接使用linux下的PEM文件来做RSA加密和解密,可避免xml格式文件的移植性问题。完整的源码,Vs2008工程,以编译和测试通过。
RSA加密解密是一种广泛应用于网络安全领域的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,使得只有持有正确密钥的人才能...
飞桨模型加密库-基于RSA加密的数据加密和解密(分发模型时对框架和python库加密).zip飞桨模型加密库-基于RSA加密的数据加密和解密(分发模型时对框架和python库加密).zip飞桨模型加密库-基于RSA加密的数据加密和解密...
10. **源代码与实践**:提供的RAR文件可能包含RSA加密和解密的源代码及可执行文件,这对于学习密码学理论和实践非常有价值。通过阅读和运行这些代码,可以深入理解RSA的工作机制。 总之,RSA加密算法是现代密码学的...
经过本人修改,简化并完善了别人的代码,使其更加的容易理解和学习! 此为一个完整的项目,可以直接在NetBeans IDE里运行测试。 功能:服务端随机生成密钥...用到的JS加密文件是从官网下载的最新版,速度快,稳定性好!
本项目"允许使用RSA4096位私钥对Eloquent属性进行加密和解密"旨在增强数据安全性,确保即使数据被非法获取,也能保持其机密性。 RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出...
Java OpenSSL生成的RSA公私钥进行数据加解密详细介绍 项目: JAVA生成的RSA的密文,通过C++来解密。 RSA这里就不多介绍了大家自己去看。 JAVA也是通过包来实现加密和解密的,那么我的C++是通过OPENSSL的库来实现的...
在这个场景中,我们将讨论如何在Django应用中实现RSA加密和解密,以便于前端与后端的安全通信。 首先,让我们理解RSA的基本原理。RSA是一种基于大素数因子分解困难性的公钥加密算法。它包括一对密钥:公钥(可公开...
注意:AES用的是CryptoJS库的,而RSA则是用的jsencrypt库,RSA用的公钥和私钥是PEM格式的,其他格式无法通过,同时只能支持公钥加密,私钥解密。tips:支持跨语言,支持js与.net后台的加密以及解密,如需借鉴后台...
RSA加密解密C#实现调用实例 public string RSAEncrypt(string xmlPublicKey, string m_strEncryptString) { try { byte[] PlainTextBArray; byte[] CypherTextBArray; string Result; System.Security....
在Delphi中实现RSA加密解密,通常需要使用特定的库或控件来处理加密操作。根据描述,这个源码包包含了无需依赖外部DLL(动态链接库)的RSA控件,这意味着所有的功能都封装在源码中,可以在XE10.2.3版本的Delphi环境...