,

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; i  passwd2 = new char[p.length];
   for(int i = 0; i  d = args[3].getBytes();
   Signature rsa = Signature.getInstance("SHA1withRSA");
   rsa.initSign((PrivateKey)k);
   rsa.update(d);
   byte 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のパスワード 秘密鍵のパスワード 元文字列 比較文字列
 */

http://tokyo.cool.ne.jp/hharuki/java/81crypt.html