• 締切済み

署名検証について

JAVAではないプログラムで取得した署名と証明書を使用して、JAVAプログラムで署名検証を行おうと思っています。 いろいろとWebで調べ、Certificateクラスを使用して公開鍵を取得しSigunature.verifyで署名を検証しようとしていますがうまくいきません。 ほかにJAVAで元データ/署名/証明書だけで署名検証できる方法はありますでしょうか?

みんなの回答

回答No.1

署名と証明書ですが、RSA、DSAなどありますがどういった方法で行っているのですか? 私も使用した事はありますが問題はありませんでしたよ。 どういった風に使用しているのでしょうか?

tttsb
質問者

お礼

遅くなりましたが、回答ありがとうございます。 現状としては検証もとの署名がリトルエンディアンで作成されているため検証が失敗しているようでした。

tttsb
質問者

補足

以下がソースコードです。 (ちょっと長いですが) /* 元データ読み込み */ byte[] data = faccess.fileread(args[0]); /* 署名データ読み込み */ byte[] sign = faccess.fileread(args[1]); /* 証明書 */ String pubcert = args[2]; /* 証明書ファイルストリーム生成 */ FileInputStream fis = new FileInputStream(pubcert); /* 証明書ファクトリオブジェクト生成 */ DataInputStream dis = new DataInputStream(fis); CertificateFactory cf = CertificateFactory.getInstance("X.509"); byte[] bytes = new byte[dis.available()]; dis.readFully(bytes); ByteArrayInputStream bais = new ByteArrayInputStream(bytes); while(bais.available() > 0){ /* 証明書取得 */ Certificate cert = cf.generateCertificate(bais); /* 公開鍵取得 */ PublicKey pubkey = cert.getPublicKey(); /* 署名オブジェクトを生成する */ Signature sig = Signature.getInstance("SHA1withRSA"); /* 公開鍵証明書での検証 */ /* 署名検証準備 */ sig.initVerify(cert); sig.update(data); /* 署名検証 */ boolean result = sig.verify(sign); System.out.println(result); /* Certificateで取得した公開鍵での検証 */ /* 署名検証準備 */ sig.initVerify(pubkey); sig.update(data); /* 署名検証 */ /*boolean*/ result = sig.verify(sign); System.out.println(result); faccess.filereadはファイルからバイトデータを 取得する関数です。 署名方法はRSAで行っています。

関連するQ&A