我正在尝试使用Crypt::OpenSSL::RSA
模块在Perl中对XML进行数字签名。我正在从文件中加载私钥。私钥是使用Java从密钥库生成的。
以下是我的Perl代码:
my $private = 'my_priv.key';
my $private_key = read_file( $private );
print "my private key text is\n", $private_key;
输出,不是把整个键放在这里,只是少数第一行: - )
> -----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKAuqJ1ZkxHZStfSt0CdEsaSYuLO
> 6zDiTpt60asVLWpLe2bf...
my $rsa_priv = Crypt::OpenSSL::RSA->new_private_key($private_key);
print "my private key is\n",$rsa_priv->get_private_key_string();
输出:
> -----BEGIN RSA PRIVATE KEY-----
> MIICXAIBAAKBgQCgLqidWZMR2UrX0rdAnRLGkmLizusw4k6betGrFS1qS3tm3+97
> wMvFXCx0Od8eb
$private_key
和$rsa_priv->get_private_key_string()
的结果不同。它应该表现得那样吗?
是否有人能够使用Crypt::OpenSSL::RSA
签署XML?
编辑:
我正在使用java代码提取私钥,代码如下 `KeyStore ks = KeyStore.getInstance(“JKS”);
keypass = sPass.toCharArray();
FileInputStream fis = new FileInputStream(store);
ks.load(fis, sPass.toCharArray());
fis.close();
String eol = System.getProperty("line.separator");
Key k = ks.getKey(alias, keypass);
System.out.println("....Generating the Private Key.....");
String encKey = new BASE64Encoder().encode(k.getEncoded());
System.out.println("Encoded Key: " + encKey);
BufferedWriter myKey = null;
myKey = new BufferedWriter(new FileWriter(alias + "_priv.key"));
myKey.write("-----BEGIN PRIVATE KEY-----" + eol);
myKey.write(encKey + eol);
myKey.write("-----END PRIVATE KEY-----");
myKey.close();
System.out.println("....Private Key Generated.....");`
同时使用java和perl,因为我正在尝试签名的xmls是perl(它是一个完整的大系统),而密钥库是在java中。
首次对任何内容进行数字签名,我的数字签名xml根本不对收件人系统进行身份验证