我知道這個問題以前已經問過,但答案根本不是我所需要的。我需要創建一個受密碼保護的文本文件。我不是說要加密,而是用簡單的文本密碼創建一個文件。這也很好找出如何在C#中打開這個文件。如何在C#中創建一個受密碼保護的文件
創建一個明文密碼保護的文件,並在稍後打開該文件。全部在C#中。
我知道這個問題以前已經問過,但答案根本不是我所需要的。我需要創建一個受密碼保護的文本文件。我不是說要加密,而是用簡單的文本密碼創建一個文件。這也很好找出如何在C#中打開這個文件。如何在C#中創建一個受密碼保護的文件
創建一個明文密碼保護的文件,並在稍後打開該文件。全部在C#中。
密碼保護沒有加密的文本文件是不可能的。但是,您可以驗證您的文本文件是否已被修改,以便您知道它已被某人更改。
這個概念很簡單。使用密碼來加密或混淆數據的散列(文本文件)。稍後您可以根據當前數據檢查該散列,並確定它是否匹配。您需要將此簽名(加密哈希)存儲在某個名爲(textfile.sig)的文件中。
您可以使用SHA1Managed.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 "";
}
}
否則,你會如果你想隱藏的人的數據,你需要在文本文件中的數據進行加密。你可以通過用全文數據而不是數據散列來調用encryptstring()來做到這一點。
問題的關鍵在於不必手動加密數據,而是讓Windows處理數據,因此我決定使用Hans Passant的建議,並簡單地使用密碼保護的zip文件以及所需的信息(txt文件)它。這可以很容易地用DotNetZip完成。
Windows安全不基於密碼。它基於安全主體。 –
您可以使用自己加密密碼。這就是通常的做法。只需根據密碼(並且沒有隨機因素)生成「Key」和「IV」,然後加密密碼並將其存儲到文件中。您只需通過解密進行驗證。 –
如果沒有加密,任何人都可以用他們希望的編輯器打開它,直到他們想要。此外,不受控制的PC中的任何內容都不可信(因此,即使是本地加密也不是100%的解決方案) – SJuan76
您打算如何在不加密密碼的情況下用密碼保護文件? –