一些人說android只支援BKS認證。不知道真還是假,所以首先建立了BKS認證。
步驟:
1、下載bcprov-jdk16-141.jar,放到\jre\lib\ext目錄下
2、修改檔案 jre6\lib\security\java.security, 在檔案中添加: security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider
在這個檔案中找到security.provider字樣,後面序號遞增,本機遞增到10
3、建立keystore。命令:
keytool -genkey -alias <別名> -keypass <密鑰口令> -keyalg Test -keysize 1024 -validity 365 -keystore <庫檔案名稱,如runcerts.keystore> -storepass <認證庫密碼> -dname "cn=testUsr, ou=產品部, o=XXX公司, c=CN, S=shandong" -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
4、簽名及驗證
//讀取密鑰庫:
FileInputStream is=new FileInputStream("C:\\Inetpub\\runcerts.keystore");
KeyStore ks=KeyStore.getInstance("BKS","BC");
ks.load(is,"123456".toCharArray());
is.close();
//讀取私密金鑰
PrivateKey priKey1=(PrivateKey)ks.getKey("test2", "123456".toCharArray());
privateKeyString =getKeyString(priKey1);
//簽名
SignText=DataSign(plainText,privateKeyString);
//以下驗證
//獲得認證
Certificate certificate=ks.getCertificate("test2");
//獲得認證
PublicKey publicKey1=certificate.getPublicKey();
publicKeyString=getKeyString(publicKey1);
//驗證
byte[]plainText1="Happy New Year!!Email:@qq.com".getBytes();
boolean verySign=verify(plainText1,publicKeyString,SignText);
String s2 = new Boolean(verySign).toString();
System.out.print("驗證結果:"+s2+"/n");
說明:大體是這個步驟,具體還有一些細節代碼沒有粘貼。