package com.froad.openapi.util;
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.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.ssl.PKCS8Key;
import org.springframework.util.StringUtils;
import com.froad.openapi.constant.KeyCommand;
public class RSAUtil {
private String prikeyPath = KeyCommand.PRIKEY_PATH;
private String prikeyPwd = KeyCommand.PRIKEY_PWD;
private static Map<String, PublicKey> partner_pk_map = new HashMap<String, PublicKey>();
private static PrivateKey froadPrikay = null;
public RSAUtil() {
froadPrikay = initPrivateKey(prikeyPath, prikeyPwd);
}
public static PrivateKey getFroadPrivateKey() {
return froadPrikay;
}
public static PublicKey getCerPublicKey(String partnerNo, String keyPath) throws Exception {
if((null != partnerNo && !"".equals(partnerNo)) || (null != keyPath && !"".equals(keyPath))) {
if(partner_pk_map.containsKey(partnerNo)) {
return partner_pk_map.get(partnerNo);
} else {
PublicKey pubkey = initCerPublicKey(keyPath);
partner_pk_map.put(partnerNo, pubkey);
return pubkey;
}
}
return null;
}
/**
* 初始化cer公钥
* @throws Exception
*/
public static PublicKey initCerPublicKey(String pubkeypathB) throws Exception {
PublicKey pubkey = null;
try {
CertificateFactory certificatefactory = CertificateFactory
.getInstance("X.509");
FileInputStream bais = new FileInputStream(pubkeypathB);
X509Certificate Cert = (X509Certificate) certificatefactory
.generateCertificate(bais);
pubkey = Cert.getPublicKey();
bais.close();
} catch (Exception e) {
throw e;
}
return pubkey;
}
/**
* 方法描述:初始化私钥
* @param: String str
* @return: PublicKey
* @version: 1.0
* @author: 范兴乾 fanxingqian@f-road.com.cn
* @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();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 方法描述:初始化公钥
* @param: String str
* @return: PublicKey
* @version: 1.0
* @author: 范兴乾 fanxingqian@f-road.com.cn
* @throws Exception
* @time: 2011-12-7 上午9:11:15
*/
public static PublicKey initPublicKey(String str) throws Exception {
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();
throw new Exception("初始化公钥异常", e);
} catch (InvalidKeySpecException e) {
e.printStackTrace();
throw new Exception("初始化公钥异常", e);
}
}
/**
* 方法描述:签名
* @param: String content, PrivateKey key, String charsetSet
* @return: String
* @version: 1.0
* @author: 范兴乾 fanxingqian@f-road.com.cn
* @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
* @author: 范兴乾 fanxingqian@f-road.com.cn
* @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
* @author: 范兴乾 fanxingqian@f-road.com.cn
* @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
* @author: 范兴乾 fanxingqian@f-road.com.cn
* @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);
}
/**
* 初始化私钥
* @param keyPath
* @param alias
* @param key
* @param pwd
* @return
* @throws KeyStoreException
* @throws NoSuchAlgorithmException
* @throws CertificateException
* @throws IOException
* @throws UnrecoverableKeyException
*/
public static PrivateKey genPrivateKey(String keyPath, String alias, String key, String pwd) throws KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException {
KeyStore ks;
PrivateKey prikey = null;
ks = KeyStore.getInstance("JKS");
FileInputStream fin = new FileInputStream(keyPath);
ks.load(fin, alias.toCharArray());
prikey = (PrivateKey) ks.getKey(key, pwd
.toCharArray());
return prikey;
}
public static void main(String[] s) throws Exception {
// String sr = "dasasdas";
// PrivateKey pk = RSAUtil.initPrivateKey("C:\\OpenSSL\\bin\\openapi_private_key_froad.key", "froad");
// String msg = RSAUtil.signPrivateKey(sr, pk, "UTF-8");
// System.out.println(msg);
//
//// String publickey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhaRco+RYyPOmnTmT+YO6svwP9bZoNY0mWm4/saGfRbWVeIleoxOKMII7S3/ZG1816pB2OJ04hT0DCad/kcPdyh1uCgISKQa5mhZfnzuNEV4P+IJM5GITf7h6PRIhOZD+XwpZbjYKyon+NJQyUdNtQslnJ+dOM8Gi59o7aGYXtAQIDAQAB";
//
// PublicKey pubk = RSAUtil.initCerPublicKey("C:\\OpenSSL\\bin\\public.cer");
//
// boolean b = RSAUtil.verifyPublicKey(sr, msg, pubk);
//
// System.out.println(b);
PrivateKey privateKey = (RSAPrivateKey) genPrivateKey("E:\\cqzx.jks", "cqtest1", "cqzx", "cqtest0");
PublicKey publicKey = (RSAPublicKey) initCerPublicKey("E:\\test1.cer");
String a = "12345";
String sign = RSAUtil.signPrivateKey(a, privateKey);
System.out.println(sign);
boolean b = RSAUtil.verifyPublicKey(a, sign, publicKey);
System.out.println(b);
}
}
- 浏览: 268628 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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 391public static void main(String[ ... -
js 加密 java解密
2017-12-05 16:27 907https://github.com/noisyle/cr ... -
java工程师成长之路
2017-03-04 17:43 594一、基础篇 1.1 JVM 1.1.1. J ... -
java 启动jar
2017-03-04 15:40 1664#!/bin/sh PRG="$0&qu ... -
ThreadLocal解决dateFormat多线程错误
2016-09-19 17:44 2177出处 http://www.blogjava.net/ki ... -
设计模式
2016-06-02 17:11 509http://www.cnblogs.com/xing9010 ... -
list分页
2016-05-11 09:56 409//分批保存数据 if(null!=aassetO ... -
根据输入执行代码块
2015-05-11 17:25 699/** * f-road.com Inc. * Copyrig ... -
java装饰器模式
2015-03-17 18:00 867java装饰器模式 意图:动态的将责任附加到对象上什么 ... -
java适配器模式
2015-03-17 17:54 653定义:属于结构型模式,其主要作用是将一个类的接口转换成客户 ... -
Java垃圾回收机制
2015-02-04 09:43 749垃圾收集GC(Garbage Coll ... -
jvisualvm结合jstatd进行远程监控
2015-01-27 16:17 862jvisualvm是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 7121、线程池简介: ... -
线程同步通信技术-wait notify 用法
2014-10-22 20:58 711/** * * <pre> * 子线程 ... -
Cisco VPN Client 442
2014-10-18 21:17 162典型的Cisco VPN Client 442 错误,之前的 ... -
JDK安装
2014-10-18 15:15 756学习Java 开发的第一步就是构建开发环境,JDK(Java ... -
MultiThreadHttpClient
2014-09-15 17:05 459package com.froad.points.bankse ...
相关推荐
本篇文章将深入探讨C#中如何实现RAS加密和解密,并通过一个WinForm应用实例——RasWinFormDemo来具体阐述。 首先,我们需要理解RAS的基本原理。RAS是一种非对称加密算法,它包括一对密钥:公钥和私钥。公钥可以公开...
"ras.dsp"和"ras.dsw"是Visual C++项目文件,用于管理和构建这个RAS加密解密程序。"ras.ncb"是Visual C++的类视图数据库,包含项目中类的信息。"ras.opt"存储了项目的编译和链接选项,而"ras.plg"是编译器的插件文件...
总的来说,“ras_加密解密vc_ras_”项目提供了一个使用VC++实现RAS加密解密算法的例子,这对于学习和理解非对称加密机制以及C++编程都是很有价值的。通过深入研究这个项目,可以提高对密码学和安全编程的理解,同时...
《VC RAS加密解密程序实例详解》 在信息技术领域,数据安全至关重要,而加密技术则是保障信息安全的重要手段。本文将深入探讨一个基于VC(Visual C++)的RAS(Rivest-Shamir-Adleman)加密算法的实例,帮助读者理解...
在PHP和Java之间实现RSA加密解密的互通,需要确保两个环境都正确地处理PEM格式的密钥,并使用相同的标准库进行加密和解密。PHP中,我们可以使用openssl扩展来操作RSA密钥,例如`openssl_pkey_new()`用于生成密钥对,...
在VC++中实现RAS加密解密,可以利用Microsoft的Cryptography API(CAPI)或更现代的CNG(Cryptography Next Generation)API。CAPI提供了一些基本的加密服务,而CNG则扩展了更多的加密算法和支持。 **CAPI使用示例*...
本项目"基于RAS加密解密程序"利用了STL(Standard Template Library)、VB(Visual Basic)以及COM(Component Object Model)组件,构建了一个简单但功能齐全的加密解密解决方案。下面将详细介绍这些知识点: 1. *...
在IT领域,加密和解密技术是保护数据安全的关键手段,尤其在C#编程中,...以上就是关于C#中MD5、DES和RAS加密解密的基本原理、实现方式以及注意事项。通过理解这些概念,开发者可以更好地保护其应用程序中的数据安全。
在提供的压缩包中,可能包含了一个实现RSA加密解密的示例程序或者代码片段,用户可以通过运行这个程序来体验RSA加密和解密的过程。为了保证安全性,应该注意密钥的管理和存储,避免私钥泄露,同时,由于RSA加密效率...
**C# RSA加密解密详解** 在信息安全领域,加密技术是一种至关重要的手段,用于保护数据的隐私和安全性。RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,广泛应用于网络通信、数据存储等领域。C#作为.NET...
本文将详细介绍C#环境下实现的MD5、DES和RSA这三种常见的加密解密方法,并通过实际的编程实例来展示它们的用法。 首先,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能将任意长度的数据转化为...
RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是现代密码学的基石之一。...通过理解算法原理和C++编程,我们可以构建出一套完整的加密解密系统,用于保护数据的安全传输。
在IT行业中,加密技术是确保数据安全的重要手段之一。...在本篇内容中,我们将聚焦于PHP中的RSA加密解密机制,这是一种基于非对称加密...对于开发人员而言,理解和掌握RSA加密解密技术是提升系统安全性的重要技能之一。
本文将深入探讨C#中的RSA加密解密机制以及如何应用于登录验证,以解决字符串长度限制的问题。 RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它的特点是拥有两个密钥:公钥和私钥。公钥用于加密,而私钥用于...
Java实现的RSA加密解密算法示例 本文主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了Java RSA加密解密算法的相关实现技巧。 知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron...
总的来说,理解和分析"RAS字符加解密源码"有助于我们深入理解RSA加密机制,以及在实际开发中如何应用和实现加密解密功能。通过学习这部分源码,我们可以更好地掌握非对称加密的核心概念,并将其应用于网络安全、数据...
此外,代码可能还包含了命令行界面,允许用户输入明文或密文进行加密解密操作。 `www.pudn.com.txt`这个文件可能是示例数据或者算法的说明文档,它可能包含了一些测试用例,用于验证RSA算法实现的正确性。例如,它...
JAVA提供了丰富的加密库,如Java Cryptography Extension (JCE),可以处理RSA加密解密。后端接收到加密数据后,使用对应的私钥进行解密,还原出原始的用户名和密码。解密后的数据再通过MD5散列处理,用于与数据库中...
DELPHI RAS加密组件是专为Delphi编程环境设计的一款强大的加密工具,适用于从Delphi 7到XE2等多个版本。这个组件集成了多种加密算法,为开发人员提供了在Delphi应用程序中实现数据安全传输和存储的能力。下面将详细...
如果文件包含加密数据,可能需要使用到上述的加密解密方法进行处理。 总结来说,RAS加密技术实例展示了如何使用C#进行数据加密和解密,以保护远程访问的安全性。通过选择合适的加密算法,设置密钥和初始化向量,...