2
私はC#からjavaにコードを移植しようとしています。 RSA/Sha1を使用して文字列を署名する必要がある部分があります。C#でJavaで署名されたものを確認する
JavaコードがC#コードと同じ結果を生成することを確認するために、javaから文字列に署名し、既存のC#コードを使用して署名を検証しようとしました。私の挑戦は、私はJavaで署名された文字列を検証できません。
ここにコードがあります。
署名のためのJavaメソッド:署名のための
public static String signPayload(byte[] stringToSign, PrivateKey privateKey){
try {
Signature rsaSignatureProvider = Signature.getInstance("SHA1withRSA");
rsaSignatureProvider.initSign(privateKey);
rsaSignatureProvider.update(stringToSign);
byte[] signature = rsaSignatureProvider.sign();
return new String(Base64.encodeBase64String(signature));
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
C#の方法:私は署名されたデータを検証するために使用しています
public String signPayload(String stringToSign, AsymmetricAlgorithm privateKey)
{
var hash = sha1.ComputeHash(Convert.FromBase64String(stringToSign));
RSACryptoServiceProvider cryptoProv = (RSACryptoServiceProvider)privateKey;
return Convert.ToBase64String(cryptoProv.SignHash(hash, CryptoConfig.MapNameToOID("SHA1")));
}
C#の方法:
public bool verifyHash(String signature, String stringToSign, PublicKey publicKey)
{
bool isVerified = false;
var responseHash = sha1.ComputeHash(Convert.FromBase64String(stringToSign));
RSACryptoServiceProvider publicKeyCrypto = (RSACryptoServiceProvider)publicKey.Key;
isVerified = publicKeyCrypto.VerifyHash(responseHash, CryptoConfig.MapNameToOID("SHA1"), Convert.FromBase64String(signature));
return isVerified;
}
私がすることができません2つの署名方法(JavaとC#)の間のギャップを参照してください。 Javaコードで間違っているのは何ですか?