真的没有好好利用加密这一周。让我解释一下我需要什么。
安全性不一定要非常强大,而且我的代码被混淆了。
我只想要一个便携的解决方案。我已经尝试过RSA,发现在生产过程中丢失了某个密钥文件,这让我一事无成,我对此一无所知,也无法在开发机器上找到它。
请帮帮忙。
发布于 2009-10-01 17:51:09
下面是一些我使用了相当多的代码(从web上的源代码中改编),它完全依赖于设置下的web.config/app.config中存储的密码。它使用三重des。
/// <summary>
/// Encrypts the string.
/// </summary>
/// <param name="text">The text.</param>
/// <returns>Encrypted string</returns>
public string EncryptString(string text)
{
// Locals
var passphrase = ConfigurationManager.AppSettings["Your Encrypt Passphrase"];
byte[] results;
var utf8 = new UTF8Encoding();
// Step 1. We hash the passphrase using MD5
// We use the MD5 hash generator as the result is a 128 bit byte array
// which is a valid length for the TripleDES encoder we use below
var hashProvider = new MD5CryptoServiceProvider();
var tdesKey = hashProvider.ComputeHash(utf8.GetBytes(passphrase));
// Step 2. Create a new TripleDESCryptoServiceProvider object
// Step 3. Setup the encoder
var tdesAlgorithm = new TripleDESCryptoServiceProvider
{
Key = tdesKey,
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
// Step 4. Convert the input string to a byte[]
var dataToEncrypt = utf8.GetBytes(text);
// Step 5. Attempt to encrypt the string
try
{
var encryptor = tdesAlgorithm.CreateEncryptor();
results = encryptor.TransformFinalBlock(dataToEncrypt, 0, dataToEncrypt.Length);
}
finally
{
// Clear the TripleDes and Hashprovider services of any sensitive information
tdesAlgorithm.Clear();
hashProvider.Clear();
}
// Step 6. Return the encrypted string as a base64 encoded string
return Convert.ToBase64String(results);
}
/// <summary>
/// Decrypts the string.
/// </summary>
/// <param name="text">The text.</param>
/// <returns>Decrypted string</returns>
public string DecryptString(string text)
{
// Locals
var passphrase = ConfigurationManager.AppSettings["Your Encrypt Passphrase"];
byte[] results;
var utf8 = new UTF8Encoding();
// Step 1. We hash the passphrase using MD5
// We use the MD5 hash generator as the result is a 128 bit byte array
// which is a valid length for the TripleDES encoder we use below
var hashProvider = new MD5CryptoServiceProvider();
var tdesKey = hashProvider.ComputeHash(utf8.GetBytes(passphrase));
// Step 2. Create a new TripleDESCryptoServiceProvider object
// Step 3. Setup the decoder
var tdesAlgorithm = new TripleDESCryptoServiceProvider
{
Key = tdesKey,
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
// Step 4. Convert the input string to a byte[]
var dataToDecrypt = Convert.FromBase64String(text);
// Step 5. Attempt to decrypt the string
try
{
var decryptor = tdesAlgorithm.CreateDecryptor();
results = decryptor.TransformFinalBlock(dataToDecrypt, 0, dataToDecrypt.Length);
}
finally
{
// Clear the TripleDes and Hashprovider services of any sensitive information
tdesAlgorithm.Clear();
hashProvider.Clear();
}
// Step 6. Return the decrypted string in UTF8 format
return utf8.GetString(results);
}最初的来源在这里:http://www.dijksterhuis.org/encrypting-decrypting-string/
发布于 2009-10-01 17:54:57
您不能在应用程序中存储机密。句号。如果这个奖品值钱的话,有人会找到你的秘密钥匙。在这个时代,一次就够了。谷歌会给出任何有兴趣找到钥匙的人的答案。一旦钥匙被公之于众,它就会把数据传播给每个人,在任何地方。
你的秘密(钥匙)必须来自外部。用户提供密码、提供的证书和密钥、密钥交换协议)。
如果您坚持将密钥存储在应用程序中,从而提供了数据混淆的最小级别(不受保护),那么使用CryptoStream和对称密钥算法,就像http://msdn.microsoft.com/en-us/library/system.security.cryptography.cryptostream.aspx上基于Rijndael的硬编码密钥示例。但你必须澄清,这不是什么,只是混淆。
发布于 2009-10-01 17:49:29
你查过弹跳城堡API了吗
https://stackoverflow.com/questions/1505382
复制相似问题