最近遇到java http api的sign生成场景,因考虑C#生成与java一致性,经测试与java生成一致。
环境:vs2022,.net4
步骤:
1、nuget IKVM;
2、改写java示例,做了相关调整:
using com.sun.org.apache.xml.@internal.security.utils;
using java.security;
using java.security.spec;
/// <summary>
/// 生签方法
/// </summary>
/// <param name="Str">明文</param>
/// <param name="Secret">秘钥</param>
/// <returns>密文</returns>
private static string getSign(string Str, string Secret)
{
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(Secret));
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
Signature signature = Signature.getInstance("SHA256WithRSA");
signature.initSign(priKey);
signature.update(System.Text.Encoding.UTF8.GetBytes(Str));
byte[] signed = signature.sign();
return Base64.encode(signed).Replace("\r", "").Replace("\n", "").Trim();
}