富友数据加密解密


import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.security.KeyFactory;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.Signature;

import java.security.spec.PKCS8EncodedKeySpec;

import java.security.spec.X509EncodedKeySpec;

import java.util.Map;

import com.hurong.core.util.AppUtil;

import com.hurong.credit.util.FuiouUtil.Base64;

import com.thirdPayInterface.Fuiou.FuiouInterfaceUtil;

/**

* 1.商户的私钥初始化

* 2.商户验签的公钥初始化

* 3.根据商户号加密数据

* 4.验签富友返回数据

*

*/

public class SecurityUtils {

/**

* 私钥

*/

public static PrivateKey privateKey;

/**

* 公钥

*/

public static PublicKey publicKey;

//得到config.properties读取的所有资源

private static Map configMap = FuiouInterfaceUtil.fuiouProperty();

/**

* 私钥文件路径 如:D:/rsa/prkey.key

*/

private static String privateKeyPath=configMap.get("thirdPay_fuiou_privateKeyPath").toString();

/**

* 公钥文件路径 如:D:/rsa/pbkey.key

*/

private static String publicKeyPath=configMap.get("thirdPay_fuiou_publicKeyPath").toString();

static {

try {

java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

}

catch (Exception e) {

e.printStackTrace();

System.out.println("密钥初始化失败");

}

}

/**

* init:初始化私钥

*/

public static void initPrivateKey(String privateKeyPath){

try {

if(privateKey==null){

privateKey = getPrivateKey(privateKeyPath);

}

} catch (Exception e) {

System.out.println("SecurityUtils初始化失败" + e.getMessage());

e.printStackTrace();

System.out.println("密钥初始化失败");

}

}

/**

* 初始化公钥

*/

public static void initPublicKey(String publicKeyPath){

try {

if(publicKey==null){

publicKey = getPublicKey(publicKeyPath);

}

} catch (Exception e) {

System.out.println("SecurityUtils初始化失败" + e.getMessage());

e.printStackTrace();

System.out.println("密钥初始化失败");

}

}

/**

* init:初始化私钥

*/

public static void initPrivateKey(){

try {

String url=AppUtil.getAppAbsolutePath();

if(privateKey==null){

//String url=AppUtil.getAppAbsolutePath();

privateKey = getPrivateKey(url+privateKeyPath);

}

} catch (Exception e) {

System.out.println("SecurityUtils初始化失败" + e.getMessage());

e.printStackTrace();

System.out.println("密钥初始化失败");

}

}

/**

* 对传入字符串进行签名

* @param inputStr

* @return

* @

*/

public static String sign(String inputStr) {

String result = null;

try {

if(privateKey==null){

//初始化

initPrivateKey();

}

byte[] tByte;

Signature signature = Signature.getInstance("SHA1withRSA","BC");

signature.initSign(privateKey);

signature.update(inputStr.getBytes("UTF-8"));

tByte = signature.sign();

result = Base64.encode(tByte);

}

catch (Exception e) {

e.printStackTrace();

System.out.println("密钥初始化失败");

}

return result;

}

/**

* 对富友返回的数据进行验签

* @param src 返回数据明文

* @param signValue 返回数据签名

* @return

*/

public static boolean verifySign(String src,String signValue) {//,String publicKeyPath

/* boolean bool = false;

try {

if(publicKey==null){

initPublicKey(publicKeyPath);

}

Signature signature = Signature.getInstance("SHA1withRSA","BC");

signature.initVerify(publicKey);

signature.update(src.getBytes("UTF-8"));

bool = signature.verify(Base64.decode(signValue));

}

catch (Exception e) {

e.printStackTrace();

System.out.println("密钥初始化失败");

}

return bool;*/

boolean bool = false;

try {

if(publicKey==null){

initPublicKey(privateKeyPath);

}

Signature signature = Signature.getInstance("SHA1withRSA","BC");

signature.initVerify(publicKey);

signature.update(src.getBytes("UTF-8"));

bool = signature.verify(Base64.decode(signValue));

}

catch (Exception e) {

e.printStackTrace();

System.out.println("密钥初始化失败");

}

return bool;

}

private static PrivateKey getPrivateKey(String filePath) {

String base64edKey = readFile(filePath);

KeyFactory kf;

PrivateKey privateKey = null;

try {

kf = KeyFactory.getInstance("RSA", "BC");

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decode(base64edKey));

privateKey = kf.generatePrivate(keySpec);

} catch (Exception e) {

e.printStackTrace();

System.out.println("密钥初始化失败");

}

return privateKey;

}

private static PublicKey getPublicKey(String filePath){

String base64edKey = readFile(filePath);

KeyFactory kf;

PublicKey publickey = null;

try {

kf = KeyFactory.getInstance("RSA", "BC");

X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decode(base64edKey));

publickey = kf.generatePublic(keySpec);

} catch (Exception e) {

e.printStackTrace();

System.out.println("密钥初始化失败");

}

return publickey;

}

private static String readFile(String fileName) {

try {

String url = fileName.replace("\\", "/");

File f = new File(url);

FileInputStream in = new FileInputStream(f);

int len = (int)f.length();

byte[] data = new byte[len];

int read = 0;

while (read <len) {

read += in.read(data, read, len-read);

}

in.close();

return new String(data);

} catch (IOException e) {

e.printStackTrace();

return null;

}

}

}

优质内容筛选与推荐>>
1、.net core使用RSA
2、C: implementing str_replace to replace all occurrences of substring (zz)
3、Performance Counter的使用
4、SQL生成随机字符串
5、面向对象程序设计第二次作业之视频作业


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号