我正在使用VS 2012,C#.NET并创建一个表单以通过LDAP进行身份验证。
我有这个代码,而且运行良好:
root = new DirectoryEntry(
"LDAP://192.168.116.20:389",
username,
password
);
用户名和密码都是纯文本。
但我想创建一个“记住密码?”复选框,我可以在文件中保存用户名和密码md5-hashed。
那么,如何使用DirectoryEntry和LDAP使用md5-hash进行身份验证?!有可能吗?
答案 0 :(得分:2)
我不相信,LDAP是一种协议,它可以对抗LM / NT哈希,它们是DES& MD4尊敬,但那是较低的水平。您可能想要做的是加密密码,保存密码,然后解密并将密码传递给LDAP字符串。
答案 1 :(得分:1)
我不相信,LDAP是一种协议,它适用于LM / NT 哈希,是DES& MD4尊重,但那是较低的水平。
LDAP是一种协议,但LDAP不使用LM / NT哈希值。
从LDAP可以通过SASL从LDAP完成LM / NT / Kerboros和md5-hash,但前提是LDAP客户端和LDAP服务器具有使用SASL的功能。
一个quik看一下(我认为wk3服务器)在ROOTDSE中显示: supportedSASLMechanisms:DIGEST-MD5 supportedSASLMechanisms:EXTERNAL supportedSASLMechanisms:GSS-SPNEGO supportedSASLMechanisms:GSSAPI
这意味着AD支持DIGEST-MD5。我不知道目录服务API是否支持此功能。
答案 2 :(得分:1)
如果您选择将数据加密为文件,则应使用 System.Security.ProtectedData 类。
您加密的数据可以绑定到当前用户或正在进行编码/解码的当前计算机。
您应该使用两种简单的方法:
示例:
private static void EncryptData(string data, Stream stream)
{
if (stream.CanWrite == false)
throw new IOException("Cannot write to stream.");
var bytes = Encoding.UTF8.GetBytes(data);
var encryptedBytes = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser);
stream.Write(encryptedBytes , 0, encryptedBytes .Length);
}
private static string DecryptData(Stream stream)
{
if (stream.CanRead == false)
throw new IOException("Cannot read fromstream.");
using (MemoryStream memoryStream = new MemoryStream())
{
stream.CopyTo(memoryStream);
var encryptedBytes = memoryStream.ToArray();
var decryptedBytes = ProtectedData.Unprotect(encryptedBytes, null, DataProtectionScope.CurrentUser)
return Encoding.UTF8.GetString(decryptedBytes);
}
}
现在,为了将它们与FileStream一起使用,只需:
public static void Encrypt(string password)
{
using (var fileStream = new FileStream(@"MyFile.dat", FileMode.Create))
{
EncryptData(password, fileStream);
fileStream.Close();
}
}
public static string Decrypt()
{
string password;
using (var fileStream = new FileStream(@"MyFile.dat", FileMode.Open))
{
password = DecryptData(fileStream);
fileStream.Close();
}
return password;
}
顺便说一句,如果您想增加加密的复杂性,可以将Entropy传递给Protect和Unprotect方法。 有关详细信息,请参阅:http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.protect(v=vs.110).aspx