package com.missyou.pay.swiftutil;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import org.json.JSONObject;
import com.alibaba.fastjson.JSON;
import com.yunpian.sdk.util.JsonUtil;
public class RSASignature {
/**
* 签名算法
*/
public static final String SIGN_ALGORITHMS = "SHA1WithRSA";
public static final String SIGN_256 = "SHA256withRSA";
public static final String MD5withRSA = "MD5withRSA";
public static final String key = "MIICoTAbBgkqhkiG9w0BBQMwDgQIXaVT77CxiEECAggABIICgMmgeGi6egMpk9o6BU0NeYSXbxqI27VhgMyq5SxjO9gCRx08lWHZqGSQVk2Z2dY3QPhv1uGHQaGXlkxmnGhu5RPmSeAwrgf/xK62Xey3BvzHo9cziAsj55u3HE0e+DWdAE8jvn6tNovBDPvp833pPBQr9J/79rNvGpr1a5EDvaVFaYtaq34ChyOa4DOn+UQZZrbzndfGKDJsbA1fFsfyNKvwmyeB+ZNvtjArGMw871nwdOA6gl0ttf9jwXbpGLQoPCEidPQ7dvg6UG3YdR79954cUlwayd01WQgunFHw8UVtnTiMAiqN+WrHdGh7ISSaGyCqwSLCWZCZd3rVOsOs0Opd7BEXxvB/oRnXXiet051pt1f0xIGqx6kQ3tN/beOa4l9RreDdukDWRwb8aJkFL3TzEho8T26t6CYCPoTtExl0BR+fjrpo7rRI+3QRxWOCGi/V39iXtPilu7scwrlLF7tGND7FTUxhS324fiu7bzdnrBsRWHex/gOSToRSXJDzKt2Yx8/mM0AjV1QsJO3yz6R1Upd/qmRxe3LWTcFy6xW59jhURi1CwnooB39WFbCvD9hHERkLUK+/eNd6PBbAszXp+uDeDww9KhicmT4yMlnOi7dHHh1EIjbNV6kP0NuCDRlkwo+Yz3NWwjByJIc4S5BeMgSTZtc+WGoaTXPgQynMwHlb6L6taMoINS0w+cg8rYlS5bhPaoferRtvrv98rn1JzU5bEJoJ1GZ1B1d/tckLsK+ZJwxXYN59Gpl3sN11bElvqWr0/MMr2/r7lOfuQKAJz7sVWLD/tTBBvTgk8oJfScoMB9aEIq3LEgwqbe2hxuzHwGQRBmTyAZQvNdeVt2U=";
static String keytwo = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANPDVfxhRzFzgs9u\r\n" +
"GEMPV0ZQdVfOR8lBq5iKVI3Ymrpmt08oCXWAZsZt31/+HKvCJqsqr4i5G0mpO9c+\r\n" +
"bbS8G+B2qaAdwvcVWamVWjBe+YguGeTMCTIOPdwgEPa5APE8ULO1G8HyHOt0j8+A\r\n" +
"hUuDKQLp79L8dX4IUlebNXBQoD75AgMBAAECgYAeN9mlUhxeqiUYhJVhvGav2ftk\r\n" +
"tEL6LSzXb6XxN9+cidvOp9/xrIj999/QSuq8d9AczNKPqBqEwGmRpY7yI4W2l8Tm\r\n" +
"m89WWYUiG0SLc0q6pq0Cm0HqkNYC5rgViUCutyMGfMZ0n5IMAaGHs0kWlmzMzyS7\r\n" +
"xXTzjulZUHMVbDe4AQJBAOksAUkhih4j/Th6Z/pa2I/VseUPSlPr3gB6T+96rEn3\r\n" +
"kl6Amgfh9jVb8gIwLbwab3AErpnXMXoqfF6dEZ9e/qECQQDofsKBsHoU5aR32M9n\r\n" +
"vE5ZExweseq35UVihJPq3B1Qd2p8kzvlqvu3RuGFwa8zXVL8LPp/gV1P0/oQrTt0\r\n" +
"PBlZAkEAk9RQZFsdRAqxKjOA5JrgHiDvjjfpeddagpcJQt1VifeqFrwV69V40U+f\r\n" +
"2X9OH6nq6Owu/l4OglOZUirm11HUwQJBAM5z4ZzwbTgpRAb4jBR97sTCZ3IKY3ex\r\n" +
"LA/z0rX3iEBwCitdQw8K6kMxugngmAdwk8RC3J5k7ct5XNF6QxVQWOECQAMIko9r\r\n" +
"Pk2EYGExW1HH2QBnL6Z+zW59J2DF9n40vre5+B/4sv1tus2xio3ztaJvPXJuscWj\r\n" +
"VYzc4eJwuzpEm4w=";
static String publickey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTw1X8YUcxc4LPbhhDD1dGUHVX\r\n" +
"zkfJQauYilSN2Jq6ZrdPKAl1gGbGbd9f/hyrwiarKq+IuRtJqTvXPm20vBvgdqmg\r\n" +
"HcL3FVmplVowXvmILhnkzAkyDj3cIBD2uQDxPFCztRvB8hzrdI/PgIVLgykC6e/S\r\n" +
"/HV+CFJXmzVwUKA++QIDAQAB";
static String keytest="MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKZ0Crijm+gLyro3\r\n" +
"Y86E17616X6JsJzfR/pb+lIBFObU5Eaoz95J0xOJOBEcNuJJ6TRD9prpFFAAUbi9\r\n" +
"/f73fREfxws2VaYmFLD7WkmaGED6qtlMGWASI9DESw0qzd6E06asbCiD7lqfjFAz\r\n" +
"TTrZyJednHtNKpzskOlpjginfw8rAgMBAAECgYBMlW1tYFFWJT7ECMIR/crpwvbI\r\n" +
"Mn+g3ZZXWURFwJumTOMuo3LoWl0USvkR3kJeQRVb570prv2ahVsUPc4EJkhS/1b0\r\n" +
"if8GN5biD7rQNZk3TXQ/sAritj2KbteRkoAkVVVGOOTTw4nsHxw97iCrDAZM3n8s\r\n" +
"9aKnm1Vph2ueS1DNsQJBANteYmr91Hq90GHkuRffUHB1VVTq6mHi63PtcjJgTYXL\r\n" +
"wGRuAJjMEu6kTCtWlltzcidZJdIhyHt0DJnlUp3aC2MCQQDCP56bT2Uk+9VLRF+t\r\n" +
"0tkIpX1F3ukB7xjYXhPIdAdaDB9zoZM0NdXhwT/54cOahD3QJ7ZClmhYyeP+wq88\r\n" +
"2wuZAkBogSVXnQa9VnHQQPsgcUVL3cnCA4uXCFhsyMBvWUt1IuTLs0/betTGFUUo\r\n" +
"HD7S4EOQlTqcSXXNwjJCmmnqQzbLAkBViiaSRjhIPQ4EgyuPJFam1BmCd1MsotnS\r\n" +
"Djuv/khugwAmr3RffYWeULeXlq/Ij4uY6qP8VrfEwcNBIQKCTgOhAkAXhEpV84sw\r\n" +
"PkkWbHNKGqpXYoud4B6kq9sWdmJKCO4xd/hlLyitb3vKv2V5gGEKOTX/D7EkDHnG\r\n" +
"W6rp+e+YMQ3w";
/**
* RSA签名
* @param content 待签名数据
* @param privateKey 商户私钥
* @param encode 字符集编码
* @return 签名值
*/
public static String sign(String content, String privateKey, String encode)
{
try
{
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(privateKey) );
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
signature.initSign(priKey);
signature.update( content.getBytes(encode));
byte[] signed = signature.sign();
return Base64.encode(signed);
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
/**
* 私钥签名
* @param content
* @param privateKey
* @return
*/
public static String sign(String content, String privateKey)
{
try
{
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(privateKey));
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
signature.initSign(priKey);
signature.update( content.getBytes("UTF-8"));
byte[] signed = signature.sign();
return Base64.encode(signed);
// byte[] keyBytes = Base64Utils.decode(privateKey);
// PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
// KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
// PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec);
// Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
// signature.initSign(privateK);
// signature.update(data);
// return Base64Utils.encode(signature.sign());
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
/**
* RSA验签名检查
* @param content 待签名数据
* @param sign 签名值
* @param publicKey 分配给开发商公钥
* @param encode 字符集编码
* @return 布尔值
*/
public static boolean doCheck(String content, String sign, String publicKey,String encode)
{
try
{
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
byte[] encodedKey = Base64.decode(publicKey);
PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
java.security.Signature signature = java.security.Signature
.getInstance(SIGN_ALGORITHMS);
signature.initVerify(pubKey);
signature.update( content.getBytes(encode) );
boolean bverify = signature.verify( Base64.decode(sign) );
return bverify;
}
catch (Exception e)
{
e.printStackTrace();
}
return false;
}
public static boolean doCheck(String content, String sign, String publicKey)
{
RSA加解密源码及测试代码完整java工程
需积分: 9 101 浏览量
2019-01-15
14:14:29
上传
评论 1
收藏 1.47MB ZIP 举报
简单龙卷风
- 粉丝: 0
- 资源: 5
最新资源
- 学生成绩管理系统-C++版本
- 吉林大学离散数学2笔记.pdf
- 通道处理过程的模拟通常涉及对通道处理机制的理解与实现.txt
- Flume进阶-自定义拦截器jar包
- Dubins曲线算法讲解和在运动规划中的使用.pdf
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈