本文整理汇总了C#中ByteVector.GetMD5Hash方法的典型用法代码示例。如果您正苦于以下问题:C# ByteVector.GetMD5Hash方法的具体用法?C# ByteVector.GetMD5Hash怎么用?C# ByteVector.GetMD5Hash使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ByteVector
的用法示例。
在下文中一共展示了ByteVector.GetMD5Hash方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: MD5Encode
public static string MD5Encode(string pw, string salt)
{
// для проверки приходит такое:
// $apr1$Vs5.....$iSQlpTkND9RjL7iAMTjDt.
// для генерирования пароля приходит случайная строка - соль
string password;
byte[] final;
// найдём соль, если в качестве соли пришёл уже хэш
// 1. Уберём магический $apr1$
if (salt.StartsWith(MD5_MAGIC_PREFIX))
{
salt = salt.Substring(MD5_MAGIC_PREFIX.Length);
}
// 2. Найдём соль до первого '$' Или 8 символов
int sp = salt.IndexOf('$');
if (sp < 0 || sp > 8) sp = 8;
salt = salt.Substring(0, sp);
//Debug.WriteLine(string.Format("salt [{0}]", salt));
ByteVector s = new ByteVector();
ByteVector s1 = new ByteVector();
s.Add(pw);
s.Add(MD5_MAGIC_PREFIX);
s.Add(salt);
s1.Add(pw);
s1.Add(salt);
s1.Add(pw);
final = s1.GetMD5Hash();
for (int i = pw.Length; i > 0; i -= MD5_DIGESTSIZE)
{
s.Add(final, 0, (i > MD5_DIGESTSIZE) ? MD5_DIGESTSIZE : i);
}
for (int i = 0; i < final.Length; i++)
final[i] = 0;
for (int i = pw.Length; i != 0; i >>= 1)
{
// (i & 1) в апаче
if ((i & 0x01) == 1)
{
s.Add(final, 0, 1);
}
else
{
s.Add(pw.Substring(0, 1));
}
}
final = s.GetMD5Hash();
for (int i = 0; i < 1000; i++)
{
s1.Clear();
if ((i & 1) != 0)
{
s1.Add(pw);
}
else
{
s1.Add(final);
}
if ((i % 3) != 0)
{
s1.Add(salt);
}
if ((i % 7) != 0)
{
s1.Add(pw);
}
if ((i & 1) != 0)
{
s1.Add(final);
}
else
{
s1.Add(pw);
}
final = s1.GetMD5Hash();
}
password = "";
ulong l;
l = ((ulong)final[0] << 16) | ((ulong)final[6] << 8) | ((ulong)final[12]);
password += PasswdHelper.to64(l, 4);
l = ((ulong)final[1] << 16) | ((ulong)final[7] << 8) | ((ulong)final[13]);
password += PasswdHelper.to64(l, 4);
l = ((ulong)final[2] << 16) | ((ulong)final[8] << 8) | ((ulong)final[14]);
//.........这里部分代码省略.........