java でpkcs12形式のファイルを使って署名と検証する方法
KeyStoreとして"pkcs12"形式でロードする
import java.security.KeyStore; import java.security.cert.Certificate; import java.security.PublicKey; import java.security.PrivateKey; import java.security.Key; import java.security.Signature; import javax.crypto.Cipher; import java.io.FileInputStream; import java.util.Enumeration; import java.security.MessageDigest; public class PKCS12test { final private KeyStore getKeyStore(String fName, String type, char passwd){ try{ FileInputStream fis = new FileInputStream(fName); KeyStore ks = KeyStore.getInstance(type); ks.load(fis, passwd); return ks; }catch(Exception ex){ System.err.println(ex); } return null; } final private PublicKey getPublicKey(String alias, KeyStore ks){ try{ Certificate ch = ks.getCertificate(alias); if(ch != null){ PublicKey key= ch.getPublicKey(); return key; } }catch(Exception ex){ System.err.println(ex); } return null; } final private Key getPrivateKey(String name, char passwd, KeyStore ks){ try{ Key key = ks.getKey(name,passwd); return key; }catch(Exception ex){ System.out.println(ex); } return null; } public static void main(String args) throws Exception { byte p = args[1].getBytes(); char passwd1 = new char[p.length]; for(int i = 0; ipasswd2 = new char[p.length]; for(int i = 0; i sign = rsa.sign(); System.out.println("Signature Generated length:"+sign.length); //検証 本当は別の証明書で行う PublicKey pk = pt.getPublicKey(ali,ks); d = args[4].getBytes(); rsa = Signature.getInstance("SHA1withRSA"); rsa.initVerify(pk); rsa.update(d); boolean verifies = rsa.verify(sign); System.out.println("signature :"+verifies); } } /* java PKCS12test ファイル名 pkcs12のパスワード 秘密鍵のパスワード 元文字列 比較文字列 */d = args[3].getBytes(); Signature rsa = Signature.getInstance("SHA1withRSA"); rsa.initSign((PrivateKey)k); rsa.update(d); byte