我想要一个这样的程序:
scanf("%s", name);
scanf("%s", id);
scanf("%d", &age);
现在我想将name
,id
和age
写入文件,但文件应该加密,这样只有我的程序才能读回它写的数据。 / p>
我是否需要使用其中一个加密库mentioned here(它们都是非常重型的库,我只需要加密文本文件),还是有其他更简单的方法?
如果加密库是解决方案,哪一个最适合简单的文本文件加密?
答案 0 :(得分:7)
如果您想要安全性,那么推出自己的加密库是错误的。使用一个完善的加密库(即使它看起来很臃肿),并将安全性和适当的实现留给专家。
如果您可以使用C ++,我建议Crypto++,如果您不能使用C ++,那么我建议您围绕Crypto++实现一个C包装器库。另一种可能性是libcrypto,尽管它缺乏对AES的支持。
但是,我应该警告你,如果程序和文本文件在同一台机器上,你需要在外部提供密码(例如由用户提供);嵌入在程序中的密码很容易提取,根本不提供任何安全性。如果程序无法访问(例如,它位于网络服务器上,并且有文本文件的人无法访问可执行文件),那就没问题了。答案 1 :(得分:3)
更好地使用对称密钥算法,如AES。例如,您可以找到小型源代码here。
如果您的应用程序很关键,那么您应该使用链接到的库。
答案 2 :(得分:2)
您需要强加密吗?您保护文件的人是否可以访问可执行文件并具备反汇编和分析的技能?他们有密码分析技能吗?如果没有,您可以使用非常简单的基于XOR的密码。
答案 3 :(得分:0)
对于一次读/写的简单文本文件,我使用流密码,例如: RC4。
假设您使用的是嵌入式密钥,RC4很容易实现,或者应该有很多轻量级的实现。
答案 4 :(得分:0)
如果您使用的是Windows,请考虑使用C和C ++提供的Windows加密API:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa382358(v=vs.85).aspx
答案 5 :(得分:-3)
Public Class Tester
Public Shared Sub Main()
Try
Dim myDESProvider As DESCryptoServiceProvider = New DESCryptoServiceProvider()
myDESProvider.Key = ASCIIEncoding.ASCII.GetBytes("12345678")
myDESProvider.IV = ASCIIEncoding.ASCII.GetBytes("12345678")
Dim myICryptoTransform As ICryptoTransform = myDESProvider.CreateEncryptor(myDESProvider.Key, myDESProvider.IV)
Dim ProcessFileStream As FileStream = New FileStream("Encrypted.txt", FileMode.Open, FileAccess.Read)
Dim ResultFileStream As FileStream = New FileStream("Decrypted.txt", FileMode.Create, FileAccess.Write)
Dim myCryptoStream As CryptoStream = New CryptoStream(ResultFileStream, myICryptoTransform, CryptoStreamMode.Write)
Dim bytearrayinput(ProcessFileStream.Length - 1) As Byte
ProcessFileStream.Read(bytearrayinput, 0, bytearrayinput.Length)
myCryptoStream.Write(bytearrayinput, 0, bytearrayinput.Length)
myCryptoStream.Close()
ProcessFileStream.Close()
ResultFileStream.Close()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Console.ReadLine()
End Sub
End Class