5

我正在尝试使用该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()不同。它应该表现得像那样吗?

有没有人能够使用 XML 签名Crypt::OpenSSL::RSA

编辑:

我正在使用 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 根本没有向收件人系统进行身份验证

4

1 回答 1

1

$private_key;和的结果$rsa_priv->get_private_key_string();不同,这应该表现得像那样吗?

是的,输入是 X509 密钥,输出是 RSA 密钥。openssl rsa -in my_priv.key给出相同的结果。

如果您对这些东西一无所知,最好使用高级库。

于 2012-07-17T11:24:15.137 回答