什么是.NET可用的加密技术(使用C#)。我有一个数字值,我想加密到字符串表示。哪一个有解密支持?
答案 0 :(得分:5)
加密(由.NET框架/ BCL提供,而不是C#语言)通常适用于字节。但那很好;数字很容易表示为字节,输出字节可以通过Convert.ToBase64String
写成字符串。
所以“所有这些,间接”......
请参阅System.Security.Cryptography
on MSDN
(重新解密:加密可以解密; 哈希不能(希望如此);所以只要你不看哈希函数,你应该是细)
答案 1 :(得分:5)
System.Security.Cryptography -
System.Security.Cryptography命名空间提供加密服务,包括数据的安全编码和解码,以及许多其他操作,例如散列,随机数生成和消息验证。
Example Walkthrough演示了如何加密和解密内容。
答案 2 :(得分:3)
无论你做什么,不要推出自己的加密算法。 System.Security.Cryptography命名空间将包含您需要的所有内容:
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
String secret = "Zomg!";
byte[] secretBytes = ASCIIEncoding.ASCII.GetBytes(secret);
// One-way hashing
String hashedSecret =
BitConverter.ToString(
SHA512Managed.Create().ComputeHash(secretBytes)
);
// Encryption using symmetric key
Rijndael rijndael = RijndaelManaged.Create();
ICryptoTransform rijEncryptor = rijndael.CreateEncryptor();
ICryptoTransform rijDecryptor = rijndael.CreateDecryptor();
byte[] rijndaelEncrypted = rijEncryptor.TransformFinalBlock(secretBytes, 0, secretBytes.Length);
String rijndaelDecrypted =
ASCIIEncoding.ASCII.GetString(
rijDecryptor.TransformFinalBlock(rijndaelEncrypted, 0, rijndaelEncrypted.Length)
);
// Encryption using asymmetric key
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string rsaParams = rsa.ToXmlString(true); // you can store the public key in a config file
// which allows you to recreate the file later
byte[] rsaEncrypted = rsa.Encrypt(secretBytes, false);
String decrypted =
ASCIIEncoding.ASCII.GetString(
rsa.Decrypt(rsaEncrypted, false)
);
// Signing data using the rsaEncryptor we just created
byte[] signedData = rsa.SignData(secretBytes, new SHA1CryptoServiceProvider());
bool verifiedData = rsa.VerifyData(secretBytes, new SHA1CryptoServiceProvider(), signedData);
}
}
}
答案 3 :(得分:1)
我首先看一下Cryptography命名空间。您可以实现自己的解密/加密字符串函数。 Here就是一个很好的例子。