我正嘗試使用Crypt::OpenSSL::RSA
模塊在Perl中對XML進行數字簽名。我正在從一個文件加載一個私鑰。私鑰是使用Java從密鑰庫生成的。Perl中的XML數字簽名
下面是我的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代碼來提取私有密鑰,代碼是如下 `密鑰庫KS = KeyStore.getInstance( 「JKS」);同時使用Java和Perl
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.....");`
,因爲我想籤個XML是在Perl(這是一個整體的大系統)和密鑰庫是在Java。
首次進行數字簽名任何東西,我的數字簽名的XML不驗證在所有接收者系統
或許,如果你添加一個用於生成Java私鑰'keytool'命令可能會有所幫助。 – 2012-07-17 10:14:02
剛剛添加了用於生成私鑰的代碼 – qateey 2012-07-17 12:40:25