import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.ssl.PKCS8Key;
import com.froad.openapi.util.RSAUtil;
import com.froad.platform.logger.Logger;
import com.froad.platform.logger.LoggerManager;
public class RsaUtil {
private static Logger Log = LoggerManager.getLogger(RsaUtil.class.getName());
/**
* 方法描述:初始化私钥
* @param: String str
* @return: PublicKey
* @version: 1.0
* @time: 2011-12-7 上午9:11:15
*/
public static PrivateKey initPrivateKey(String path, String pwd) {
try {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
File file = new File(path);
byte[] b = null;
InputStream in = new FileInputStream(file);
PKCS8Key pkcs8 = new PKCS8Key(in, pwd.toCharArray());
b = pkcs8.getDecryptedBytes();
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(b);
PrivateKey prikey = keyFactory.generatePrivate(keySpec);
return prikey;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
Log.info("初始化私钥无此算法");
} catch (FileNotFoundException e) {
e.printStackTrace();
Log.info("初始化私钥文件未找到");
} catch (GeneralSecurityException e) {
Log.info("初始化私钥安全异常");
e.printStackTrace();
} catch (IOException e) {
Log.info("初始化私钥IO异常");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
Log.info("初始化私钥异常");
}
return null;
}
/**
* 方法描述:初始化公钥
* @param: String str
* @return: PublicKey
* @version: 1.0
* @time: 2011-12-7 上午9:11:15
*/
public static PublicKey initPublicKey(String str) {
KeyFactory keyFactory;
try {
keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec keySpec = new X509EncodedKeySpec((Base64.decodeBase64(str)));
PublicKey pubkey = keyFactory.generatePublic(keySpec);
return pubkey;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
Log.info("初始化公钥无此算法");
} catch (InvalidKeySpecException e) {
e.printStackTrace();
Log.info("初始化公钥无效的密钥规范");
} catch (Exception e) {
e.printStackTrace();
Log.info("初始化公钥异常");
}
return null;
}
/**
* 方法描述:签名
* @param: String content, PrivateKey key, String charsetSet
* @return: String
* @version: 1.0
* @time: 2011-12-7 上午9:12:48
*/
public static String signPrivateKey(String content, PrivateKey key, String charsetSet) throws NoSuchAlgorithmException,
IOException, InvalidKeySpecException, InvalidKeyException, SignatureException {
PrivateKey prikey = key;
Signature signature = Signature.getInstance("SHA1WithRSA");
signature.initSign(prikey);
signature.update(content.getBytes(charsetSet));
byte[] signBytes = signature.sign();
String sign = new String(Base64.encodeBase64(signBytes));
return sign;
}
/**
* 方法描述:验签
* @param: String content, String sign,PublicKey key,String charsetSet
* @return: boolean
* @version: 1.0
* @time: 2011-12-7 上午9:28:04
*/
public static boolean verifyPublicKey(String content, String sign, PublicKey key,
String charsetSet) throws NoSuchAlgorithmException, IOException,
InvalidKeySpecException, InvalidKeyException, SignatureException {
PublicKey pubkey = key;
byte[] signed = Base64.decodeBase64(sign.getBytes());
Signature signature = Signature.getInstance("SHA1WithRSA");
signature.initVerify(pubkey);
signature.update(content.getBytes(charsetSet));
return signature.verify(signed);
}
/**
* 方法描述:签名
* @param: String content, PrivateKey key
* @return: String
* @version: 1.0
* @time: 2011-12-7 上午9:22:21
*/
public static String signPrivateKey(String content, PrivateKey key) throws NoSuchAlgorithmException, IOException,
InvalidKeySpecException, InvalidKeyException, SignatureException {
PrivateKey prikey = key;
Signature signature = Signature.getInstance("SHA1WithRSA");
signature.initSign(prikey);
signature.update(content.getBytes("UTF-8"));
byte[] signBytes = signature.sign();
String sign = new String(Base64.encodeBase64(signBytes));
return sign;
}
/**
* 方法描述:验签
* @param: String content, String sign,PublicKey key
* @return: boolean
* @version: 1.0
* @time: 2011-12-7 上午9:25:05
*/
public static boolean verifyPublicKey(String content, String sign, PublicKey key)
throws NoSuchAlgorithmException, IOException,
InvalidKeySpecException, InvalidKeyException, SignatureException {
PublicKey pubkey = key;
byte[] signed = Base64.decodeBase64(sign.getBytes());
Signature signature = Signature.getInstance("SHA1WithRSA");
signature.initVerify(pubkey);
signature.update(content.getBytes("UTF-8"));
return signature.verify(signed);
}
public static void main(String[] args) throws InvalidKeyException, NoSuchAlgorithmException, Exception, Exception, Exception {
String sr = "dasasdas";
PrivateKey pk = initPrivateKey("D:\\secretkey\\OpenSSL\\bin\\test_private_key.key", "12345");
String msg = signPrivateKey(sr, pk,"utf-8");
System.out.println(msg);
// String publickey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhaRco+RYyPOmnTmT+YO6svwP9bZoNY0mWm4/saGfRbWVeIleoxOKMII7S3/ZG1816pB2OJ04hT0DCad/kcPdyh1uCgISKQa5mhZfnzuNEV4P+IJM5GITf7h6PRIhOZD+XwpZbjYKyon+NJQyUdNtQslnJ+dOM8Gi59o7aGYXtAQIDAQAB";
PublicKey pubk = initPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp25k4FVKXP8uhTCykknGKRWpNWonmBWuqFx2ZdWJ+pzw9ndg957X8kAXSeyii0Bef2hXWRJwdveY//XuEdRRuQr99ycOHuiSwj4Mt6S/nKf7unDWKBeVEGcSXBQNQEciiCFOVb7stSkqQ2aBms6uHQexeTjz7MFKsXT3cFBwCpwIDAQAB");
boolean b = verifyPublicKey(sr, msg, pubk);
System.out.println(b);
}
}
- 浏览: 267205 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (187)
- spring (10)
- jquery (14)
- js (18)
- java (44)
- freemarker (7)
- 框架介绍 (1)
- tomcat (4)
- oracle (7)
- 喜欢的诗文 (4)
- linux (19)
- nokia (1)
- 那些事 (1)
- apache (3)
- dom4j (1)
- SOA (1)
- 企业架构 (2)
- baidu (1)
- svn (1)
- 测试 (4)
- liunx (0)
- memcahce (1)
- mysql (25)
- maven (4)
- 推广 (1)
- 网络 (1)
- vpn (1)
- drools (1)
- mongodb (1)
- redis (3)
- xlightweb (1)
- wifi (1)
- 学习资料 (1)
- git (1)
- 系统设计 (1)
- springboot (1)
- 自考 (0)
最新评论
-
zuo_qin_bo:
if(df==null){ //这个地方并发多的情况 ...
ThreadLocal解决dateFormat多线程错误 -
kongnan93:
好文!赞一个!!!!
jquery blockUI 居中显示 -
cxc_110928:
如果加上不能出现连续的数字或者字母 如 1234 abcd ...
用java 匹配一个数字和字母密码的正则表达式 -
wzwahl36:
http://www.atool.org/json2javab ...
JSON和JAVA的POJO的相互转换
发表评论
-
折半查找法
2019-06-17 18:11 375public static void main(String[ ... -
js 加密 java解密
2017-12-05 16:27 890https://github.com/noisyle/cr ... -
java工程师成长之路
2017-03-04 17:43 589一、基础篇 1.1 JVM 1.1.1. J ... -
java 启动jar
2017-03-04 15:40 1655#!/bin/sh PRG="$0&qu ... -
ThreadLocal解决dateFormat多线程错误
2016-09-19 17:44 2173出处 http://www.blogjava.net/ki ... -
设计模式
2016-06-02 17:11 489http://www.cnblogs.com/xing9010 ... -
list分页
2016-05-11 09:56 406//分批保存数据 if(null!=aassetO ... -
根据输入执行代码块
2015-05-11 17:25 693/** * f-road.com Inc. * Copyrig ... -
java装饰器模式
2015-03-17 18:00 861java装饰器模式 意图:动态的将责任附加到对象上什么 ... -
java适配器模式
2015-03-17 17:54 650定义:属于结构型模式,其主要作用是将一个类的接口转换成客户 ... -
Java垃圾回收机制
2015-02-04 09:43 743垃圾收集GC(Garbage Coll ... -
jvisualvm结合jstatd进行远程监控
2015-01-27 16:17 856jvisualvm是Jdk自带的,具体点,据说是jdk1 ... -
最佳线程数总结
2015-01-26 11:53 0最佳线程数: 性能压 ... -
线程dump
2015-01-26 11:19 0Java 的线程 线程是指 ... -
几种阻塞队列
2015-01-26 11:11 0转自:http://blog.csdn.net/yydcj/ ... -
线程池的原理及实现
2015-01-26 10:53 7081、线程池简介: ... -
线程同步通信技术-wait notify 用法
2014-10-22 20:58 706/** * * <pre> * 子线程 ... -
Cisco VPN Client 442
2014-10-18 21:17 162典型的Cisco VPN Client 442 错误,之前的 ... -
JDK安装
2014-10-18 15:15 749学习Java 开发的第一步就是构建开发环境,JDK(Java ... -
MultiThreadHttpClient
2014-09-15 17:05 455package com.froad.points.bankse ...
相关推荐
C# RSA加密、解密、加签、验签、支持JAVA格式公钥私钥、PEM格式公钥私钥、.NET格式公钥私钥 对应文章: http://blog.csdn.net/gzy11/article/details/54573973
RSAUtil工具类
这个"RSAUtil-master.zip"压缩包文件包含了使用.NET框架和C#语言实现的RSA加解密代码,这对于开发人员来说是一个宝贵的资源,可以帮助他们理解并实现在C#项目中应用RSA算法。 首先,RSA的核心原理是基于大数因子...
标题中的“RsaUtil.rar”指的是一个包含RSA(Rivest-Shamir-Adleman)加密算法相关工具或类库的压缩文件。RSA是一种非对称加密算法,广泛应用于网络安全,如数字签名、数据加密等领域。这个RAR文件可能包含了用C#...
RSAUtil.cs
- `generateKeyPair(int keySize)`: 生成指定密钥长度的公私钥对。 - `encrypt(byte[] plaintext, PublicKey publicKey)`: 使用公钥加密明文。 - `decrypt(byte[] ciphertext, PrivateKey privateKey)`: 使用私钥...
在"RSAUtil[1]"这个项目中,可能包含了上述过程的C++实现,如大数运算库、密钥生成函数、加密解密函数等。备份文件"RSAUtil.backup.2004-12-18 10-05-49"可能是源代码在特定时间的版本,用于恢复或对比历史代码变化...
RSA工具类,用于密码加密,解密,RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制
在提供的`Base64.java`和`RSAUtil.java`文件中,可能包含了将生成的公钥和私钥进行Base64编码以便于存储和传输的代码。Base64是一种常见的字符编码方式,可以将二进制数据转换为ASCII字符串,便于在网络上传输。 ...
非对称加密RSA算法的工具类,详细的写了多个方法讲解!
public class RSAUtil { private static final String ALGORITHM = "RSA"; public static KeyPair generateKeyPair() throws NoSuchAlgorithmException { KeyPairGenerator keyGen = KeyPairGenerator....