c#创建的md5sum和bash的区别
Difference between md5sum created by c# and bash
我正在尝试理解为什么当我使用 linux md5sum 函数时,如下所示:
#!/bin/bash
p="4c4712a4141d261ec0ca8f90379"
Etime="123456"
TOTP=$(echo $Etime$p|md5sum|cut -f1 -d' ')
echo $TOTP
我有:ce007ddfb5eb0ccda6d4a6ddd631c563
但是当我尝试使用以下代码在 C# 中生成 md5sum 时:
public static string Hash()
{
string p = "4c4712a4141d261ec0ca8f90379";
string Etime = "123456";
string h = Etime + p ;
string r = md5test(h);
return r;
}
public static string md5test(string testString)
{
byte[] asciiBytes = ASCIIEncoding.UTF8.GetBytes(testString);
byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes);
string hashedString = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
return hashedString;
}
我有不同的值:acb6242ab9ad7a969fb27f10644a0283
我认为问题在于将字节转换为字符串,但我不确定。
有谁能解释我在哪里犯了错误或如何做才能达到预期 value:ce007ddfb5eb0ccda6d4a6ddd631c563
谢谢
沃伊泰克
问题是 echo
输出末尾的换行符。使用 echo -n
或 printf
代替:
TOTP=$(printf %s "$Etime$p" | md5sum | cut -f1 -d' ')
我重写了你测试的bash部分:
printf '1234564c4712a4141d261ec0ca8f90379' | md5sum
# prints: acb6242ab9ad7a969fb27f10644a0283 -
printf '1234564c4712a4141d261ec0ca8f90379\n' | md5sum
# prints: ce007ddfb5eb0ccda6d4a6ddd631c563 -
不同的是,echo 追加一个换行符。一种解决方案是使用带有选项 -n 的 echo:echo -n ...
。更好的解决方案是使用 printf 而不是 echo:printf %s%s' "$Etime" "$p"
我正在尝试理解为什么当我使用 linux md5sum 函数时,如下所示:
#!/bin/bash
p="4c4712a4141d261ec0ca8f90379"
Etime="123456"
TOTP=$(echo $Etime$p|md5sum|cut -f1 -d' ')
echo $TOTP
我有:ce007ddfb5eb0ccda6d4a6ddd631c563
但是当我尝试使用以下代码在 C# 中生成 md5sum 时:
public static string Hash()
{
string p = "4c4712a4141d261ec0ca8f90379";
string Etime = "123456";
string h = Etime + p ;
string r = md5test(h);
return r;
}
public static string md5test(string testString)
{
byte[] asciiBytes = ASCIIEncoding.UTF8.GetBytes(testString);
byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes);
string hashedString = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
return hashedString;
}
我有不同的值:acb6242ab9ad7a969fb27f10644a0283
我认为问题在于将字节转换为字符串,但我不确定。 有谁能解释我在哪里犯了错误或如何做才能达到预期 value:ce007ddfb5eb0ccda6d4a6ddd631c563
谢谢 沃伊泰克
问题是 echo
输出末尾的换行符。使用 echo -n
或 printf
代替:
TOTP=$(printf %s "$Etime$p" | md5sum | cut -f1 -d' ')
我重写了你测试的bash部分:
printf '1234564c4712a4141d261ec0ca8f90379' | md5sum
# prints: acb6242ab9ad7a969fb27f10644a0283 -
printf '1234564c4712a4141d261ec0ca8f90379\n' | md5sum
# prints: ce007ddfb5eb0ccda6d4a6ddd631c563 -
不同的是,echo 追加一个换行符。一种解决方案是使用带有选项 -n 的 echo:echo -n ...
。更好的解决方案是使用 printf 而不是 echo:printf %s%s' "$Etime" "$p"