- 浏览: 362000 次
- 性别:
- 来自: 中国山东
文章分类
最新评论
-
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 647package com.wistone.server.cor ... -
Java Pass By Value Example
2014-05-03 09:32 722package author.estone.java; ... -
How to use git in eclipse ?
2014-04-20 11:03 672when we use git in eclipse, w ... -
这段代码执行任务时启动了几个线程?
2013-08-07 10:16 1142import java.util.Timer; impor ... -
LookupError: unknown encoding 'ms936'
2013-08-05 12:42 1428Jython调用print方法,报错如下LookupErr ... -
Nginx反向代理不跳转(nginx/java/tomcat/jsp)
2013-03-19 17:48 3334<% String path = request.g ... -
Eclipse Indigo Maven SCM SVN
2012-12-20 23:06 1033Following these steps: 1) Ins ... -
驼峰格式和下划线格式字符串相互转换
2012-11-21 11:57 3553/** * @param strs * ... -
延迟5s的另外一种写法
2012-08-07 14:24 740int seconds = 5; l ... -
Use CodeMoel Generate Java Source Code
2012-06-06 20:21 1617package samples; // Example: ... -
找jar的两个网站
2012-05-26 02:00 748finjar.com docjar.com -
Tomcat开启JMX功能
2011-11-15 00:20 1361使用Jconsole或者VisualVM监控Tomcat的JV ... -
Facebook中FBML和IFrame的工作原理
2010-05-19 11:52 3233在Canvas Page中,用户创建的应用需要使用facebo ... -
数据库为什么要添加连接池
2010-03-03 16:55 1497今天在学习kauklahti的时 ... -
分析使用Jdbc连接数据库时用到的对象
2010-03-03 16:54 1100先看有上文给出的一个连接msyql的Jdbc的源码。 //- ... -
一行“神奇”的代码
2010-02-02 15:15 890最近在复习闫宏的 ... -
老生常谈--return和Collection中的回值问题
2010-01-25 17:35 0关于return返回值的问题和Collection中存放引用的 ... -
Pushlet--Web Comet FrameWork
2010-01-06 10:51 1056Server-side notification to b ... -
一个Tomcat中文文档网站
2009-12-21 15:13 2697这里有中文版的Tomcat的文档http://www.jaxm ... -
Java中圆周率的表示方法
2009-11-27 09:54 7857JDK中使用的静态的圆周率:Math.PI 自定义的圆周 ...
相关推荐
unity工具类RSA加密和解密
通常C#使用xml格式的密钥文件,不能使用Linux下的公钥和私钥pem文件。...本源码直接使用linux下的PEM文件来做RSA加密和解密,可避免xml格式文件的移植性问题。完整的源码,Vs2008工程,以编译和测试通过。
经过本人修改,简化并完善了别人的代码,使其更加的容易理解和学习! 此为一个完整的项目,可以直接在NetBeans IDE里运行测试。 功能:服务端随机生成密钥...用到的JS加密文件是从官网下载的最新版,速度快,稳定性好!
Java OpenSSL生成的RSA公私钥进行数据加解密详细介绍 项目: JAVA生成的RSA的密文,通过C++来解密。 RSA这里就不多介绍了大家自己去看。 JAVA也是通过包来实现加密和解密的,那么我的C++是通过OPENSSL的库来实现的...
RSA加密解密C#实现调用实例 public string RSAEncrypt(string xmlPublicKey, string m_strEncryptString) { try { byte[] PlainTextBArray; byte[] CypherTextBArray; string Result; System.Security....
C#做的RSA加密解密, 带winform界面, 测试通过, 代码完整。
注意:AES用的是CryptoJS库的,而RSA则是用的jsencrypt库,RSA用的公钥和私钥是PEM格式的,其他格式无法通过,同时只能支持公钥加密,私钥解密。tips:支持跨语言,支持js与.net后台的加密以及解密,如需借鉴后台...
RSA加密解密工具,用于各类敏感信息文件的加密和解密,压缩包内含操作说明
可以直接运行成功的RSA加密解密示例 JAVA端采用公钥加密,服务端C#采用私钥解密。
RSA加密解密算法源码,功能齐全,没有密码,使用方便,学习用.
RSA解密加密JAVA
【delphiRSA加解密】支持RSA公钥加密私钥解密,RSA私钥加密公钥解密,秘钥格式支持PKCS8和PKCS1,D7~XE10可用
后来又传了个新的,叫做“包括私钥加密的RSA密钥生成和加密解密”基于.net Framework 4编,能够生成公钥私钥,直观看到(e,n)和(d,n),能够进行文本及文件加密解密(相关函数输入输出均为byte[],非常好用),...
rsa对字符加密,解密。程序加密,解密,示例程序,程序不大,适合参考学习
RSA对称、非对称加密解密算法,源代码和可执行文件,希望对学习密码学的朋友有帮助!
python Django RSA 前台加密 后端解密,简单demo。
利用System.Numerics.BigInteger实现,私钥加密,公钥解密。兼容PKCS1填充方式。有效文件只有MyRSA.cs一个,其它文件是因为带了一个演示窗口。
亲测可用,可参考:https://blog.csdn.net/qq_37835111/article/details/87358779
C#RSA加密与JAVA解密,实现相互通信,对字符进行加密,java解密,对密文字节进行编码
RSA加密和解密程序!非常好用,值得参考!