我想加密硬盘,主板等的序列号。你能建议一些好的加密数学公式吗?
答案 0 :(得分:9)
涉及加密的一般经验法则是,如果你以前没有这样做过,那你就错了。如果加密很重要,那么使用其他人的软件包(你有源代码,最好不要引入后门程序),因为他们会解决这些问题。查看加密中的Schneier's book以获取一些通用方程和实现。
但是,如果你只是想使用加密而不是真的搞乱实现它(即使这只是复制书中的代码),那么请查看其他人提到的加密命名空间。
答案 1 :(得分:3)
System.Security.Cryptography命名空间
http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx
答案 2 :(得分:0)
http://code.google.com/p/zscreen/source/browse/trunk/ZScreenLib/Helpers/PasswordManager.cs具有加密和解密字符串的方法。那是一个开始。 :)
答案 3 :(得分:0)
当你提到C#时,我建议你看一下.NET框架Cryptography namespace。
您应该使用为您提供的算法之一,而不是希望实现自己的算法。
答案 4 :(得分:0)
取决于您想要使用它们的内容。在System.Security.Cryptography命名空间中实现了大量算法。
如果你想加密数据并将它们发送到其他机器并解密它们,你最好的选择是非对称加密,例如。 RSA
如果您只对数据进行编码然后进行比较,但从不对它们进行解码,那么最好的办法就是使用散列,例如SHA-1。
如果你只是想掩盖字符串,你可以用一些预定义的常量清楚地对每个字符进行异或,然后通过执行相同的过程进行解码:
private static string key = "MySecretKey";
private static byte[] keyData = Encoding.ASCII.GetBytes(key);
public static byte[] Encrypt(byte[] source)
{
byte[] target = new byte[source.Length];
for (int i = 0; i < target.Length; i++)
target[i] = (byte)(source[i] ^ keyData[i % keyData.Length]);
return target;
}
答案 5 :(得分:0)
BouncyCastle C#版本还可能为您提供.NET加密以外的一些有趣功能。