C# 如何在C语言中创建受密码保护的文件#
我知道以前有人问过这个问题,但答案根本不是我需要的。我需要创建一个受密码保护的文本文件。我不是要加密,只是用一个简单的文本密码创建一个文件。同时,了解如何用C#打开此文件也会很好C# 如何在C语言中创建受密码保护的文件#,c#,.net,.net-4.5,C#,.net,.net 4.5,我知道以前有人问过这个问题,但答案根本不是我需要的。我需要创建一个受密码保护的文本文件。我不是要加密,只是用一个简单的文本密码创建一个文件。同时,了解如何用C#打开此文件也会很好 创建一个受密码保护的纯文本文件,并在以后打开此文件。用密码保护未加密的文本文件实际上是不可能的。但是,您可以验证您的文本文件是否已被修改,以便您知道它已被他人修改 这个概念很简单。使用密码加密或混淆数据(文本文件)的散列。您可以稍后根据当前数据检查此哈希,并确定它是否匹配。您需要将此签名(加密哈希)存储在一个名为(te
创建一个受密码保护的纯文本文件,并在以后打开此文件。用密码保护未加密的文本文件实际上是不可能的。但是,您可以验证您的文本文件是否已被修改,以便您知道它已被他人修改 这个概念很简单。使用密码加密或混淆数据(文本文件)的散列。您可以稍后根据当前数据检查此哈希,并确定它是否匹配。您需要将此签名(加密哈希)存储在一个名为(textfile.sig)的文件中 您可以使用SHA1 Managed.NET类创建哈希,使用TripleDESCryptoServiceProvider类加密生成的哈希 类似于
public string GetSignature(string text, string password)
{
byte[] key;
byte[] key2;
GetKeys(password, out key, out key2);
string sig = encryptstring(GetSHA1(text), key, key2);
}
public void GetKeys(string password, out byte[] key, out byte[] key2)
{
byte[] data = StringToByte(password);
SHA1 sha = new SHA1CryptoServiceProvider();
MD5 md5 = new MD5CryptoServiceProvider();
byte[] hash1 = sha.ComputeHash(data);
byte[] hash2 = md5.ComputeHash(data);
// Generate some key data based on the supplied password;
byte[] key = new byte[24];
for (int i = 0; i < 20; i++)
{
key[i] = hash1[i];
}
for (int i = 0; i < 4; i++)
{
key[i + 20] = hash2[i];
}
byte[] key2 = new byte[8];
for (int i = 0; i < 8; i++)
{
key2[i] = hash2[i+4];
}
}
public string GetSHA1(string text)
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] hashValue;
byte[] message = UE.GetBytes(text);
SHA1Managed hashString = new SHA1Managed();
string hex = "";
hashValue = hashString.ComputeHash(message);
foreach (byte x in hashValue)
{
hex += String.Format("{0:x2}", x);
}
return hex;
}
public string ByteToString(byte[] buff)
{
string sbinary = "";
for (int i = 0; i < buff.Length; i++)
{
sbinary += buff[i].ToString("X2"); // hex format
}
return (sbinary);
}
public string encryptstring(string instr, byte[] key, byte[] key2)
{
TripleDES threedes = new TripleDESCryptoServiceProvider();
threedes.Key = key;
threedes.IV = key2;
ICryptoTransform encryptor = threedes.CreateEncryptor(key, key2);
MemoryStream msEncrypt = new MemoryStream();
CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
// Write all data to the crypto stream and flush it.
csEncrypt.Write(StringToByte(instr), 0, StringToByte(instr).Length);
csEncrypt.FlushFinalBlock();
return ByteToString(msEncrypt.ToArray());
}
public string decryptstring(string instr, byte[] key, byte[] key2)
{
if (string.IsNullOrEmpty(instr)) return "";
TripleDES threedes = new TripleDESCryptoServiceProvider();
threedes.Key = key;
threedes.IV = key2;
ICryptoTransform decryptor = threedes.CreateDecryptor(key, key2);
// Now decrypt the previously encrypted message using the decryptor
MemoryStream msDecrypt = new MemoryStream(HexStringToByte(instr));
CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
try
{
return ByteToString(csDecrypt);
}
catch (CryptographicException)
{
return "";
}
}
公共字符串GetSignature(字符串文本、字符串密码)
{
字节[]键;
字节[]键2;
获取密钥(密码、输出密钥、输出密钥2);
string sig=encryptstring(GetSHA1(text)、key、key2);
}
public void GetKeys(字符串密码、输出字节[]键、输出字节[]键2)
{
字节[]数据=字符串字节(密码);
SHA1 sha=新的SHA1CryptoServiceProvider();
MD5 MD5=新的MD5CryptoServiceProvider();
字节[]hash1=sha.ComputeHash(数据);
字节[]hash2=md5.ComputeHash(数据);
//根据提供的密码生成一些关键数据;
字节[]键=新字节[24];
对于(int i=0;i<20;i++)
{
key[i]=hash1[i];
}
对于(int i=0;i<4;i++)
{
键[i+20]=hash2[i];
}
字节[]键2=新字节[8];
对于(int i=0;i<8;i++)
{
键2[i]=hash2[i+4];
}
}
公共字符串GetSHA1(字符串文本)
{
Unicode编码UE=新的Unicode编码();
字节[]哈希值;
字节[]消息=UE.GetBytes(文本);
SHA1Managed hashString=新的SHA1Managed();
字符串十六进制=”;
hashValue=hashString.ComputeHash(消息);
foreach(哈希值中的字节x)
{
十六进制+=String.Format(“{0:x2}”,x);
}
返回十六进制;
}
公共字符串ByteToString(字节[]buff)
{
字符串sbinary=“”;
for(int i=0;i
否则,您将需要对文本文件中的数据进行加密。如果您想对人隐藏数据,则需要对文本文件中的数据进行加密。您可以通过使用全文数据而不是数据的散列调用encryptstring()来实现这一点。问题的关键在于不必手动加密数据,而是让Windows来处理,因此我决定接受Hans Passant的建议,只需使用带有所需信息的密码保护zip文件(txt文件)里面。使用DotNetZip很容易做到这一点。您可以使用密码本身加密密码。事情通常都是这样做的。只需根据密码(无随机因素)生成一个
密钥
和IV
,然后加密密码并将其存储到文件中。你只需解密就可以验证。如果它没有加密,任何人都可以用他们想要的编辑器打开它,然后窥探直到他们想要为止。此外,不受控制的PC中没有任何东西是可信的(因此,即使在本地进行加密也不是100%的解决方案),您打算如何使用密码保护文件而不进行加密?除非您放弃使用文本文件进行加密的想法,否则这不会有任何效果。改为创建.zip存档。它支持密码,Windows将提示输入密码。Windows安全性不基于密码。它基于安全原则。