package ch01basic.signature;
/**
* Created with IntelliJ IDEA.
* User: Administrator
* Date: 12-7-23
* Time: 上午8:58
* To change this template use File | Settings | File Templates
*/
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import static ch01basic.signature.KeyUtil.bytesToHexStr;
import static ch01basic.signature.KeyUtil.hexStrToBytes;
public class SignatureData {
public void run() {
try {
String prikeyvalue = "30820277020100300d06092a864886f70d0101010500048202613082025d0201000281810093dbe94b47911b429ae9cbb7181651492a29532a74caef2f15385334d168d75d236b4752ccf24d29ed7f3fa5d52dc18d106f8f1d7fcafac546f9de5bb96633dc3e7b92cf527221aa736b97669e8a8389587cfe05aeaaad15f3f2409fea47ec00c1b81f6036c4c71bdba66230f67114a1e29ee29c5bb6d3f9b5d3171ad0b11fc9020301000102818100876bcae85fcbcf23d9ae781e61b94f09abcbdd97ed1050b0d6c697aeb07d4d82c885e0f53d304eec2fd17401f695c9c7e15dcbbe40e52f78afe0fa7f17f73b56fbe0b3f2dba57c273ef615b5d919d71dc06517d2ff9b92ad2a00922374cc426799bdd8c29ed894261f56591ee2ee9d85037e5b1bea3e5ebd54c0733696a05d61024100e505552f22a429e9ed06b29e283a3dc7c90b424fe06c6916642ed30d4eae69733ffcdecd47d1c22853c7534fb2c266f470fb28d8810e58058f43d026419b075f024100a546f39adda494da5fd9aa5a77223e7d871b601932de46f6aba619ff142e094f1e4890b81766cf0c37f1a6c22a0038f903c281ef812707a875513f6b40e371d7024100c5ee15f0e6bf7a79f1a0183f18053ddfaca14e6e3a47778b228a555ceae351bf894dc2412810e0fc796b8b5515e96d915513bbf9619044028a0ed1963e9cfd8102407c2a508ad0e67b198f96c3bf50eefe0969fdebf5225d10ecf1c9489074459da2bdba80567ce634b816334a37663c6290d8fd408680fda4682f32c9b536bb6863024051244e4ffd8086182a894cc0c9653bf48df9d3b9e16d4f73f0f1eb966c130ce0abe50405bd018dbc5b55e6d545c6976a6e8e288b825b62b0750b8c958e80a9e4";//这是GenerateKeyPair输出的私钥编码
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(hexStrToBytes(prikeyvalue));
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey myprikey = keyf.generatePrivate(priPKCS8);
String myinfo = "orderId=10dkfadsfksdkssdkd&amount=80&orderTime=20060509"; // 要签名的信息
// 用私钥对信息生成数字签名
Signature signet = Signature.getInstance("MD5withRSA");
signet.initSign(myprikey);
signet.update(myinfo.getBytes());
byte[] signed = signet.sign(); // 对信息的数字签名
System.out.println("signed(签名内容)原值=" + bytesToHexStr(signed));
System.out.println("info(原值)=" + myinfo);
System.out.println("签名并生成文件成功");
} catch (Exception e) {
e.printStackTrace();
System.out.println("签名并生成文件失败");
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SignatureData s = new SignatureData();
s.run();
}
}