Java的RSA签名
来源:互联网 发布:北航软件学院哪个老师 编辑:程序博客网 时间:2024/06/05 19:16
rsasign.java主方法
package com.vvvtimes.util;import java.security.KeyFactory;import java.security.PrivateKey;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.RSAPrivateKeySpec;import org.bouncycastle.asn1.ASN1InputStream;import org.bouncycastle.asn1.ASN1Primitive;import org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure;public class rsasign { static String header = "<!-- 537606aed546c5ba42c0820ad7fd0d74ee7caf90c232a484d0464b3332c42a9189555aebdba3570fe6566842ba7b7bb88da360f202ae9536a2a12fcdf39600c7 --><ObtainTicketResponse><message></message><prolongationPeriod>607875500</prolongationPeriod><responseCode>OK</responseCode><salt>1508484258274</salt><ticketId>1</ticketId><ticketProperties>licensee=Administrator licenseType=0 </ticketProperties></ObtainTicketResponse>"; static String content = "<ObtainTicketResponse><message></message><prolongationPeriod>607875500</prolongationPeriod><responseCode>OK</responseCode><salt>1508484258274</salt><ticketId>1</ticketId><ticketProperties>licensee=Administrator\tlicenseType=0\t</ticketProperties></ObtainTicketResponse>"; String ASNKEY = "-----BEGIN RSA PRIVATE KEY-----\r\n" + "MIIBOgIBAAJBALecq3BwAI4YJZwhJ+snnDFj3lF3DMqNPorV6y5ZKXCiCMqj8OeOmxk4YZW9aaV9\r\n" + "ckl/zlAOI0mpB3pDT+Xlj2sCAwEAAQJAW6/aVD05qbsZHMvZuS2Aa5FpNNj0BDlf38hOtkhDzz/h\r\n" + "kYb+EBYLLvldhgsD0OvRNy8yhz7EjaUqLCB0juIN4QIhAOeCQp+NXxfBmfdG/S+XbRUAdv8iHBl+\r\n" + "F6O2wr5fA2jzAiEAywlDfGIl6acnakPrmJE0IL8qvuO3FtsHBrpkUuOnXakCIQCqdr+XvADI/UTh\r\n" + "TuQepuErFayJMBSAsNe3NFsw0cUxAQIgGA5n7ZPfdBi3BdM4VeJWb87WrLlkVxPqeDSbcGrCyMkC\r\n" + "IFSs5JyXvFTreWt7IQjDssrKDRIPmALdNjvfETwlNJyY\r\n" + "-----END RSA PRIVATE KEY-----"; String PCKS8KEY = "-----BEGIN PRIVATE KEY-----\r\n" + "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAt5yrcHAAjhglnCEn\r\n" + "6yecMWPeUXcMyo0+itXrLlkpcKIIyqPw546bGThhlb1ppX1ySX/OUA4jSakHekNP\r\n" + "5eWPawIDAQABAkBbr9pUPTmpuxkcy9m5LYBrkWk02PQEOV/fyE62SEPPP+GRhv4Q\r\n" + "Fgsu+V2GCwPQ69E3LzKHPsSNpSosIHSO4g3hAiEA54JCn41fF8GZ90b9L5dtFQB2\r\n" + "/yIcGX4Xo7bCvl8DaPMCIQDLCUN8YiXppydqQ+uYkTQgvyq+47cW2wcGumRS46dd\r\n" + "qQIhAKp2v5e8AMj9ROFO5B6m4SsVrIkwFICw17c0WzDRxTEBAiAYDmftk990GLcF\r\n" + "0zhV4lZvztasuWRXE+p4NJtwasLIyQIgVKzknJe8VOt5a3shCMOyysoNEg+YAt02\r\n" + "O98RPCU0nJg=\r\n" + "-----END PRIVATE KEY-----"; static String key22 = "MIIBOgIBAAJBALecq3BwAI4YJZwhJ+snnDFj3lF3DMqNPorV6y5ZKXCiCMqj8OeOmxk4YZW9aaV9" + "ckl/zlAOI0mpB3pDT+Xlj2sCAwEAAQJAW6/aVD05qbsZHMvZuS2Aa5FpNNj0BDlf38hOtkhDzz/h" + "kYb+EBYLLvldhgsD0OvRNy8yhz7EjaUqLCB0juIN4QIhAOeCQp+NXxfBmfdG/S+XbRUAdv8iHBl+" + "F6O2wr5fA2jzAiEAywlDfGIl6acnakPrmJE0IL8qvuO3FtsHBrpkUuOnXakCIQCqdr+XvADI/UTh" + "TuQepuErFayJMBSAsNe3NFsw0cUxAQIgGA5n7ZPfdBi3BdM4VeJWb87WrLlkVxPqeDSbcGrCyMkC" + "IFSs5JyXvFTreWt7IQjDssrKDRIPmALdNjvfETwlNJyY"; static String key33 = "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAt5yrcHAAjhglnCEn" + "6yecMWPeUXcMyo0+itXrLlkpcKIIyqPw546bGThhlb1ppX1ySX/OUA4jSakHekNP" + "5eWPawIDAQABAkBbr9pUPTmpuxkcy9m5LYBrkWk02PQEOV/fyE62SEPPP+GRhv4Q" + "Fgsu+V2GCwPQ69E3LzKHPsSNpSosIHSO4g3hAiEA54JCn41fF8GZ90b9L5dtFQB2" + "/yIcGX4Xo7bCvl8DaPMCIQDLCUN8YiXppydqQ+uYkTQgvyq+47cW2wcGumRS46dd" + "qQIhAKp2v5e8AMj9ROFO5B6m4SsVrIkwFICw17c0WzDRxTEBAiAYDmftk990GLcF" + "0zhV4lZvztasuWRXE+p4NJtwasLIyQIgVKzknJe8VOt5a3shCMOyysoNEg+YAt02" + "O98RPCU0nJg=";public static String Sign(String content){ return rsasign.Sign(content.getBytes(), key22);}public static String Sign2(String content){ return rsasign.Sign2(content.getBytes(), key33); }//传入秘钥为ASN格式 //私钥签名程序,privateKey是私钥base64编码字符串,即私钥文件数据中,中间的主体部分 public static String Sign(byte[] content, String privateKey) {try {byte[] keybyte = Base64.decode(privateKey.toString());ASN1InputStream in = new ASN1InputStream(keybyte);ASN1Primitive obj = in.readObject();RSAPrivateKeyStructure pStruct = RSAPrivateKeyStructure.getInstance(obj);RSAPrivateKeySpec spec = new RSAPrivateKeySpec(pStruct.getModulus(), pStruct.getPrivateExponent());KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey priKey = keyFactory.generatePrivate(spec);java.security.Signature signature = java.security.Signature.getInstance("MD5WithRSA");signature.initSign(priKey);signature.update(content);byte[] signed = signature.sign();return Hex.bytesToHexString(signed); } catch (Exception e) { e.printStackTrace(); } return null; } //传入秘钥为PKCS#8私钥非加密格式//私钥签名程序,privateKey是私钥base64编码字符串,即私钥文件数据中,中间的主体部分public static String Sign2(byte[] 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("MD5WithRSA");signature.initSign(priKey);signature.update(content);byte[] signed = signature.sign();return Hex.bytesToHexString(signed);} catch (Exception e) {e.printStackTrace();}return null;}}
Base64.java base64编码解码相关方法
package com.vvvtimes.util;import java.io.IOException;public class Base64 {/** * 编码 * * @param bstr * @return String */public static String encode(byte[] bstr) {return new sun.misc.BASE64Encoder().encode(bstr);}/** * 解码 * * @param str * @return string */public static byte[] decode(String str) {byte[] bt = null;try {sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();bt = decoder.decodeBuffer(str);} catch (IOException e) {e.printStackTrace();}return bt;}}
Hex.java String转hex方法
package com.vvvtimes.util;public class Hex {public static String bytesToHexString(byte[] src){ StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } /** * Convert hex string to byte[] * @param hexString the hex string * @return byte[] */ public static byte[] hexStringToBytes(String hexString) { if (hexString == null || hexString.equals("")) { return null; } hexString = hexString.toUpperCase(); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } private static byte charToByte(char c) { return (byte) "0123456789ABCDEF".indexOf(c); } }
阅读全文
0 0
- Java的RSA签名
- java RSA加密 RSA签名
- Python的RSA签名
- PHP的RSA签名
- 基于RSA的盲签名算法Java实现
- RSA签名验证的JAVA JDK实现方式
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- RSA的签名认证实现
- RSA 签名
- RSA 签名
- 基于Crypto++/Cryptopp的rsa密钥生成,rsa加密、解密,rsa签名、验签
- 基于Crypto++/Cryptopp的rsa密钥生成,rsa加密、解密,rsa签名、验签
- 基于Crypto++/Cryptopp的rsa密钥生成,rsa加密、解密,rsa签名、验签12
- 基于Crypto++/Cryptopp的rsa密钥生成,rsa加密、解密,rsa签名、验签
- 基于Crypto++/Cryptopp的rsa密钥生成,rsa加密、解密,rsa签名、验签12
- RSA签名之:RSA加密
- JAVA RSA签名 验签 以及 加密解密
- Struts入门案例
- 链表练习:两个有序链表序列的合并
- 字符串统计
- java 父类子类同名方法的调用
- 自定义ScrollView实现下拉放大头部图片
- Java的RSA签名
- Queue Reconstruction by Height
- 非关系型数据库简介
- PYTHON+POWERSHELL建设IT自动化平台(一)
- 完数的输出。输出1000内所有完数。
- c语言知识点
- 如何在Linux下安装及打开PyCharm
- Struts 自动装配
- 第5章 包及访问控制权限