using System;
using System.Security.Cryptography;
using System.Text;
public class Test
{
public static void Main()
{
byte[] saltBytes = Convert.FromBase64String("YMgvriNfwJloaGPLmnqmtw==");
byte[] passwordBytes = Encoding.Unicode.GetBytes("Julio.22"); // DNN usa UTF-16
var pbkdf2 = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
byte[] hashBytes = pbkdf2.GetBytes(20); // 160 bits
Console.WriteLine(Convert.ToBase64String(hashBytes));
Console.WriteLine(Convert.ToBase64String((new Rfc2898DeriveBytes("Julio.22", System.Convert.FromBase64String("YMgvriNfwJloaGPLmnqmtw=="))).GetBytes(20)));
byte[] bytes = Encoding.Unicode.GetBytes("Julio.22");
byte[] src = Convert.FromBase64String("YMgvriNfwJloaGPLmnqmtw==");
byte[] dst = new byte[src.Length + bytes.Length];
Buffer.BlockCopy(src, 0, dst, 0, src.Length);
Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length);
HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
byte[] inArray = algorithm.ComputeHash(dst);
Console.WriteLine(Convert.ToBase64String(inArray));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uU2VjdXJpdHkuQ3J5cHRvZ3JhcGh5Owp1c2luZyBTeXN0ZW0uVGV4dDsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlieXRlW10gc2FsdEJ5dGVzID0gQ29udmVydC5Gcm9tQmFzZTY0U3RyaW5nKCJZTWd2cmlOZndKbG9hR1BMbW5xbXR3PT0iKTsKICAgICAgICBieXRlW10gcGFzc3dvcmRCeXRlcyA9IEVuY29kaW5nLlVuaWNvZGUuR2V0Qnl0ZXMoIkp1bGlvLjIyIik7IC8vIEROTiB1c2EgVVRGLTE2CgogICAgICAgIHZhciBwYmtkZjIgPSBuZXcgUmZjMjg5OERlcml2ZUJ5dGVzKHBhc3N3b3JkQnl0ZXMsIHNhbHRCeXRlcywgMTAwMCk7CiAgICAgICAgYnl0ZVtdIGhhc2hCeXRlcyA9IHBia2RmMi5HZXRCeXRlcygyMCk7IC8vIDE2MCBiaXRzCgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKENvbnZlcnQuVG9CYXNlNjRTdHJpbmcoaGFzaEJ5dGVzKSk7CiAgICAgICAgCgkJQ29uc29sZS5Xcml0ZUxpbmUoQ29udmVydC5Ub0Jhc2U2NFN0cmluZygobmV3IFJmYzI4OThEZXJpdmVCeXRlcygiSnVsaW8uMjIiLCBTeXN0ZW0uQ29udmVydC5Gcm9tQmFzZTY0U3RyaW5nKCJZTWd2cmlOZndKbG9hR1BMbW5xbXR3PT0iKSkpLkdldEJ5dGVzKDIwKSkpOwoJCQoJCWJ5dGVbXSBieXRlcyA9IEVuY29kaW5nLlVuaWNvZGUuR2V0Qnl0ZXMoIkp1bGlvLjIyIik7CiAgICAgICAgICAgIGJ5dGVbXSBzcmMgPSBDb252ZXJ0LkZyb21CYXNlNjRTdHJpbmcoIllNZ3ZyaU5md0psb2FHUExtbnFtdHc9PSIpOwogICAgICAgICAgICBieXRlW10gZHN0ID0gbmV3IGJ5dGVbc3JjLkxlbmd0aCArIGJ5dGVzLkxlbmd0aF07CiAgICAgICAgICAgIEJ1ZmZlci5CbG9ja0NvcHkoc3JjLCAwLCBkc3QsIDAsIHNyYy5MZW5ndGgpOwogICAgICAgICAgICBCdWZmZXIuQmxvY2tDb3B5KGJ5dGVzLCAwLCBkc3QsIHNyYy5MZW5ndGgsIGJ5dGVzLkxlbmd0aCk7CiAgICAgICAgICAgIEhhc2hBbGdvcml0aG0gYWxnb3JpdGhtID0gSGFzaEFsZ29yaXRobS5DcmVhdGUoIlNIQTEiKTsKICAgICAgICAgICAgYnl0ZVtdIGluQXJyYXkgPSBhbGdvcml0aG0uQ29tcHV0ZUhhc2goZHN0KTsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoQ29udmVydC5Ub0Jhc2U2NFN0cmluZyhpbkFycmF5KSk7CgkJCgl9Cn0=