我一直在努力将简单的PHP脚本从PHP转换为c#。
我已经尝试了所有没有成功的转换代码的变体。 我遇到的主要问题是针对PHP输出运行代码结果时结果的匹配。
本质上,我正在尝试构建与PHP hex2bin相同的功能。
对于简单的输入样本,这一切都可以很好地工作,但是对于复杂的项目,它会中断。
这是PHP脚本代码块
PHP:
$challenge = "50F8358C3E894AC1868C6EF8303AC4F14E9831470C046D5F3DBABB2EB588979E";
$secret = "verysecretstring";
$plain = "test";
$hexchall = **hex2bin($challenge)**
$crypt_secret = md5($hexchall . $secret, true);
RESULT:
crypt_secret = "25a41f897e548d1300d032ba36100d94"
C#:
public static string MD5_string(string text)
{
byte[] asciiBytes = ASCIIEncoding.ASCII.GetBytes(text);
byte[] hashedBytes = MD5CryptoServiceProvider.Create().ComputeHash(asciiBytes);
string hashedString = BitConverter.ToString(hashedBytes).Replace("-", "").ToLower();
return hashedString;
}
public static string ConvertHextoASCII(String hexString)
{
try
{
string ascii = string.Empty;
for (int i = 0; i < hexString.Length; i += 2)
{
String hs = string.Empty;
hs = hexString.Substring(i, 2);
uint decval = System.Convert.ToUInt32(hs, 16);
char character = System.Convert.ToChar(decval);
ascii += character;
}
return ascii;
}
catch (Exception ex) { Console.WriteLine(ex.Message); }
return string.Empty;
}
public static string Encrypt_Password()
{
//string plain, string challenge, string secret
var password = "test";
var challenge = "50F8358C3E894AC1868C6EF8303AC4F14E9831470C046D5F3DBABB2EB588979E";
var secret = "verysecretstring";
var hex4 = ConvertHextoASCII(challenge);
var crypt_secret4 = MD5_string(string.Concat(hex4, secret));
}
我尝试了很多在堆栈溢出时发现的解决方案,但是没有运气。即使我从C#代码中获得与PHP相同的字节,我也不认为二进制字符串转换会保留所有字符。
请,有人可以指出正确的方向吗?