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

使用 apache commons 编解码器框架尝试以下代码:

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

不幸的是,modulus.toByteArray()它不直接映射到 XML 数字签名的ds:CryptoBinary类型,这也需要去除前导零八位字节。在进行 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 回答