java獲取證書私鑰,並加密簽名
阿新 • • 發佈:2019-02-02
/**
* 簽名演算法
* @author zhoujia
* @date 2017-9-8
* @todo TODO
* @param data 需要簽名的內容
* @param keyStoreFileName 含私鑰的檔案
* @param keyStorePassword 含私鑰檔案的密碼
* @param keyStoreAlias 別名
* @return
*/
public static String signData(String data,String keyStoreFileName,String keyStorePassword,String keyStoreAlias)
{
KeyStore keyStore;
byte[] signRstByte=null;
String signValue="";
try {
keyStore = KeyStore.getInstance("PKCS12");//獲取pfx證書例項 當證書為jks 格式時引數應當為JKS
FileInputStream in=new FileInputStream(keyStoreFileName);//獲取證書檔案流
char[]pwdChar=keyStorePassword.toCharArray();//證書密碼
keyStore.load(in, pwdChar);//載入證書到keystore中
if (enumas.hasMoreElements())// we are readin just one certificate.
{
keyAlias = (String)enumas.nextElement();
DevLogger.tradeLog("alias=[" + keyAlias + "]");
Signature sign=Signature.getInstance("SHA1WithRSA");//SHA1WithRSA簽名演算法
sign.initSign(privateKey);//設定私鑰
sign.update(data.getBytes());//設定明文
signRstByte=sign.sign();//加密
BASE64Encoder encoder=new BASE64Encoder();
signValue=encoder.encodeBuffer(signRstByte);//BASE64編碼
//System.out.println("簽名並編碼後的內容signValue=="+signValue);
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SignatureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return signValue;
}
* 簽名演算法
* @author zhoujia
* @date 2017-9-8
* @todo TODO
* @param data 需要簽名的內容
* @param keyStoreFileName 含私鑰的檔案
* @param keyStorePassword 含私鑰檔案的密碼
* @param keyStoreAlias 別名
* @return
*/
public static String signData(String data,String keyStoreFileName,String keyStorePassword,String keyStoreAlias)
{
KeyStore keyStore;
byte[] signRstByte=null;
String signValue="";
try {
keyStore = KeyStore.getInstance("PKCS12");//獲取pfx證書例項 當證書為jks 格式時引數應當為JKS
FileInputStream in=new FileInputStream(keyStoreFileName);//獲取證書檔案流
char[]pwdChar=keyStorePassword.toCharArray();//證書密碼
keyStore.load(in, pwdChar);//載入證書到keystore中
Enumeration enumas = keyStore.aliases();
//此處不知道別名。(如有固定別名則直接用)
String keyAlias = null;if (enumas.hasMoreElements())// we are readin just one certificate.
{
keyAlias = (String)enumas.nextElement();
DevLogger.tradeLog("alias=[" + keyAlias + "]");
}
PrivateKey privateKey=(PrivateKey)keyStore.getKey(keyAlias, pwdChar);//從證書中獲取私鑰Signature sign=Signature.getInstance("SHA1WithRSA");//SHA1WithRSA簽名演算法
sign.initSign(privateKey);//設定私鑰
sign.update(data.getBytes());//設定明文
signRstByte=sign.sign();//加密
BASE64Encoder encoder=new BASE64Encoder();
signValue=encoder.encodeBuffer(signRstByte);//BASE64編碼
//System.out.println("簽名並編碼後的內容signValue=="+signValue);
} catch (KeyStoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SignatureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return signValue;
}