遇到个难题,如何在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#中的实现方式。
各位大佬,诚心求教,小子万分感激。
...全文
2244 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
韩老骥 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}");
}
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2020-12-22 05:01
社区公告

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