首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#和java - hmacsha256哈希Redux的区别

c#和java - hmacsha256哈希Redux的区别
EN

Stack Overflow用户
提问于 2017-12-28 14:53:46
回答 1查看 343关注 0票数 0

在之前的post中测试java和c# hmacsha256实现输出之间的差异时,我注意到输出略有不同,即当我运行java代码时,输出是

代码语言:javascript
复制
ivEyFpkagEoghGnTw_LmfhDOsiNbcnEON50mFGzW9_w=

但在C#代码中

代码语言:javascript
复制
ivEyFpkagEoghGnTw/LmfhDOsiNbcnEON50mFGzW9/w=

有没有人见过这种情况,即java示例中有_,c#示例中有/

Java代码

代码语言:javascript
复制
import java.util.*;
import javax.crypto.*;
import javax.crypto.spec.*;

public class Test {
    public static void main (String[] args) throws Exception {
        String secretAccessKey = "mykey";
        String data = "my data";
        byte[] secretKey = secretAccessKey.getBytes();
        SecretKeySpec signingKey = new SecretKeySpec(secretKey, "HmacSHA256");
        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(signingKey);
        byte[] bytes = data.getBytes();
        byte[] rawHmac = mac.doFinal(bytes);
        System.out.println(Base64.getUrlEncoder().encodeToString(rawHmac));
    }
}

C#码

代码语言:javascript
复制
using System;
using System.Security.Cryptography;
using System.Text;

class Test
{
    static void Main()
    {
        String secretAccessKey = "mykey";
        String data = "my data";
        byte[] secretKey = Encoding.UTF8.GetBytes(secretAccessKey);
        HMACSHA256 hmac = new HMACSHA256(secretKey);
        hmac.Initialize();
        byte[] bytes = Encoding.UTF8.GetBytes(data);
        byte[] rawHmac = hmac.ComputeHash(bytes);
        Console.WriteLine(Convert.ToBase64String(rawHmac));
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-28 14:59:36

这似乎是Base64编码器的一种设计选择,其中一种选择使用_字符,另一种选择使用/字符(C#还使用+字符而不是-字符)。如果需要跨语言使用该字符串,可以使用myString.replace(oldChar, newChar) (myString.Replace(oldChar, newChar) in C#)替换不匹配字符。

如果希望C# Base64字符串看起来像Java的Base64字符串,可以使用Microsoft.IdentityModel.Tokens.Base64UrlEncoder,但这是一个必须安装的Nuget包。它使用-_,而不是+/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48009620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档