1

Webサービス呼び出しの署名タグを手動で作成しようとしています。キーストアから証明書にアクセスし、証明書の公開鍵にアクセスしました。RSAKeyValueをds:CryptoBinaryタイプに変換する際に問題が発生しました。コードはmudulusと指数のBiginteger値を返します。私は、それらをオクテットに変換してからBas64に変換する方法またはアルゴリズムを探しています。これが私のコードです

RSAPublicKey rsaKey  = (RSAPublicKey)certificate.getPublicKey();
customSignature.Modulus = rsaKey.getModulus(); 
customSignature.Exponent = rsaKey.getPublicExponent();

整数をオクテット表現に変換するためにJavaで利用できるソリューションはありますか?

4

2 に答える 2

2

apachecommonsコーデックフレームワークを使用して次のコードを試してください。

BigInteger modulus = rsaKey.getModulus();
org.apache.commons.codec.binary.Base64.encodeBase64String(modulus.toByteArray());
于 2011-01-14T09:38:26.430 に答える
0

残念ながら、 XMLデジタル署名のds:CryptoBinarymodulus.toByteArray()タイプに直接マップすることはできません。これには、先​​行ゼロオクテットを削除する必要もあります。base64エンコーディングを行う前に、次のようなことを行う必要があります

byte[] modulusBytes = modulus.toByteArray();
int numLeadingZeroBytes = 0;
while( modulusBytes[numLeadingZeroBytes] == 0 )
    ++numLeadingZeroBytes;
if ( numLeadingZeroBytes > 0 ) {
    byte[] origModulusBytes = modulusBytes;
    modulusBytes = new byte[origModulusBytes.length - numLeadingZeroBytes];
    System.arraycopy(origModulusBytes,numLeadingZeroBytes,modulusBytes,0,modulusBytes.length);
}
于 2012-08-25T00:07:01.730 に答える