C# SHA512转Base64,b64字符串太长

问题描述

我正在处理一个 API,它想要一个 SHA512 加密值,该值已转换为 base64。

问题是 API 参数有 256 个字符的限制,所以我的 base64 编码的 SHA512 值不能超过 256 个字符,它们总是最终成为,我的 base64 大约有 600 个字符长。 我不知道 base64 是如何工作的,但据我所知,它不能更短,因为 SHA512 值是 512 位,在编码为 base64 时总是返回相同的长度?或者有没有办法获得更短的 base64 值?

这是我的 SHA512 散列方法

private byte[] SHA512Hash(string payload)
    {
        using (SHA512 shaHash = SHA512.Create())
        {
            byte[] sourceBytes = System.Text.Encoding.UTF8.GetBytes(payload);
            byte[] hashBytes = shaHash.ComputeHash(sourceBytes);

            return hashBytes;
        }
    }

这是我的签名并转换为 base64:

        byte[] hashedPayload = SHA512Hash(payload);
        byte[] sign;
        string signature;

        using (RSA rsa = cert.GetRSAPrivateKey())
        {
            sign = rsa.SignData(hashedPayload,HashAlgorithmName.SHA512,RSASignaturePadding.Pkcs1);
            
            signature = Convert.ToBase64String(sign);
        }

我使用的 api 有一个 Java 示例,我是否将他们的 Java 代码正确翻译成 C#?

String payload = "JSON_PAYLOAD_GOES_HERE";
byte[] msg_bytes = payload.getBytes("UTF-8"); MessageDigest md = MessageDigest.getInstance("SHA-512"); byte[] hash_value = md.digest(msg_bytes);

// getKeyPair is your own function that returns your key pair for signing-certificate
KeyPair keyPair = getKeyPair();

Signature sig = Signature.getInstance("NONEwithRSA");
sig.initSign(keyPair.getPrivate());
sig.update(hash_value);
byte[] signatureBytes = sig.sign();
String signature = Base64.getEncoder().encodetoString(signatureBytes);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)