遇到个难题,如何在c#环境里实现java的messageDigest.digest()?

genshi12309 2020-12-22 05:01:09
public static String getSHA256(String str)
{
MessageDigest messageDigest;
String encodestr = "";
try
{
messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(str.getBytes(StandardCharsets.UTF_8));
encodestr = byte2Hex(messageDigest.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
return encodestr;
}

以上是一个java的类。
我这边是c#,.net framework,需要post一个接口,接口是java实现的。但是传参中发现,有个参数是需要加密的,使用的就是如上所示的一个类。目前我就卡在messageDigest.digest()这里。sha256这些都有类似的方式可以实现。但是我找了很久,没有找倒messageDigest.digest()在c#中的实现方式。
各位大佬,诚心求教,小子万分感激。
...全文
3030 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
PengZhaoYe 2021-12-22
  • 打赏
  • 举报
回复

楼主问题解决了吗,我也遇到类似的问题,请教一下

八爻老骥 2020-12-22
  • 打赏
  • 举报
回复
引用 4 楼 genshi12309的回复:
[quote=引用 1 楼 icoolno1 的回复:]

String encodestr = "";
            using (SHA256 mySHA256 = SHA256.Create())
            {
                // Compute and print the hash values for each file in directory.
                try
                {
                    
                    byte[] hashValue = mySHA256.ComputeHash(Encoding.UTF8.GetBytes(str));
                    foreach(byte b in hashValue)
                    {
                        encodestr += b.ToString("X2");
                    }
                    Console.WriteLine(encodestr);

                }
                catch (UnauthorizedAccessException e)
                {
                    Console.WriteLine($"Access Exception: {e.Message}");
                }
请问大佬,是否需要考虑JAVA和C#的byte[],范围不一样呢?因为java的byte是-128-127[/quote] 16进制是一样的
genshi12309 2020-12-22
  • 打赏
  • 举报
回复
引用 1 楼 icoolno1 的回复:

String encodestr = "";
            using (SHA256 mySHA256 = SHA256.Create())
            {
                // Compute and print the hash values for each file in directory.
                try
                {
                    
                    byte[] hashValue = mySHA256.ComputeHash(Encoding.UTF8.GetBytes(str));
                    foreach(byte b in hashValue)
                    {
                        encodestr += b.ToString("X2");
                    }
                    Console.WriteLine(encodestr);

                }
                catch (UnauthorizedAccessException e)
                {
                    Console.WriteLine($"Access Exception: {e.Message}");
                }
请问大佬,是否需要考虑JAVA和C#的byte[],范围不一样呢?因为java的byte是-128-127
八爻老骥 2020-12-22
  • 打赏
  • 举报
回复
引用 2 楼 icoolno1 的回复:

foreach(byte b in hashValue)
{
encodestr += b.ToString("X2");
}

可以换成

Convert.ToHexString(hashValue)

需要.net 5.0
八爻老骥 2020-12-22
  • 打赏
  • 举报
回复

foreach(byte b in hashValue)
{
encodestr += b.ToString("X2");
}

可以换成

Convert.ToHexString(hashValue)
八爻老骥 2020-12-22
  • 打赏
  • 举报
回复

String encodestr = "";
using (SHA256 mySHA256 = SHA256.Create())
{
// Compute and print the hash values for each file in directory.
try
{

byte[] hashValue = mySHA256.ComputeHash(Encoding.UTF8.GetBytes(str));
foreach(byte b in hashValue)
{
encodestr += b.ToString("X2");
}
Console.WriteLine(encodestr);

}
catch (UnauthorizedAccessException e)
{
Console.WriteLine($"Access Exception: {e.Message}");
}

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧