C# .NET加密bytearray
有没有办法不使用流来加密bytearray???好吧,您可以编写自己的加密算法-但只需使用内置的流式API写入,然后使用将其转换为字节数组就容易多了。好吧,您可以编写自己的加密算法,但只需使用内置的流式API写入,然后使用将其转换为字节数组,就容易多了。如果您关心磁盘I/O,可以使用MemoryStream 但是,RSACryptServiceProvider类将在字节数组上操作。此类使用RSA算法的实现执行非对称加密和解密C# .NET加密bytearray,c#,.net,encryption,C#,.net,Encryption,有没有办法不使用流来加密bytearray???好吧,您可以编写自己的加密算法-但只需使用内置的流式API写入,然后使用将其转换为字节数组就容易多了。好吧,您可以编写自己的加密算法,但只需使用内置的流式API写入,然后使用将其转换为字节数组,就容易多了。如果您关心磁盘I/O,可以使用MemoryStream 但是,RSACryptServiceProvider类将在字节数组上操作。此类使用RSA算法的实现执行非对称加密和解密 示例显示了如何使用字节数组执行此操作如果您关心磁盘I/O,可以使用Me
示例显示了如何使用字节数组执行此操作如果您关心磁盘I/O,可以使用MemoryStream 但是,RSACryptServiceProvider类将在字节数组上操作。此类使用RSA算法的实现执行非对称加密和解密
示例显示了如何使用字节数组执行此操作。请使用块密码并自行实现 但这几乎毫无意义,因为在字节数组上使用MemoryStream应该可以正常工作,并且将使用经过良好测试的实现
在谈论加密时,自己实现某些东西通常是个坏主意。使用块密码,自己实现 但这几乎毫无意义,因为在字节数组上使用MemoryStream应该可以正常工作,并且将使用经过良好测试的实现
当你谈论加密时,自己实现一些东西通常是个坏主意。使用Microsofts Enterprise Library,你可以做到这一点,但我同意其他人的观点,不使用流并不能真正获得任何好处 使用Microsofts Enterprise Library,您可以做到这一点,但我同意其他人的看法,即不使用流并不能真正获得任何好处 事实上,您根本不需要使用任何流来处理字节。 您只需要调用ICryptoTransform的TransformFinalBlock()方法,它可以是从SymmetricAlgorithm类派生的任何算法的加密器或解密器
public class CryptoProvider
{
private SymmetricAlgorithm _algorithm = new RijndaelManaged();
public byte[] EncryptData(byte[] data, string password)
{
GetKey(password);
ICryptoTransform encryptor = _algorithm.CreateEncryptor();
byte[] cryptoData = encryptor.TransformFinalBlock(data, 0, data.Length);
return cryptoData;
}
public byte[] DecryptData(byte[] cryptoData, string password)
{
GetKey(password);
ICryptoTransform decryptor = _algorithm.CreateDecryptor();
byte[] data = decryptor.TransformFinalBlock(cryptoData, 0, cryptoData.Length);
return data;
}
private void GetKey(string password)
{
byte[] salt = new byte[8];
byte[] passwordBytes = Encoding.ASCII.GetBytes(password);
int length = Math.Min(passwordBytes.Length, salt.Length);
for (int i = 0; i < length; i++)
salt[i] = passwordBytes[i];
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, salt);
_algorithm.Key = key.GetBytes(_algorithm.KeySize / 8);
_algorithm.IV = key.GetBytes(_algorithm.BlockSize / 8);
}
}
公共类加密提供程序
{
私有对称算法_算法=新的RijndaelManaged();
公共字节[]加密数据(字节[]数据,字符串密码)
{
获取密钥(密码);
ICryptoTransform加密程序=_算法.CreateEncryptor();
byte[]cryptoData=encryptor.TransformFinalBlock(数据,0,数据.长度);
返回加密数据;
}
公共字节[]解密数据(字节[]加密数据,字符串密码)
{
获取密钥(密码);
ICryptoTransform解密程序=_算法。CreateDecryptor();
字节[]数据=解密程序.TransformFinalBlock(cryptoData,0,cryptoData.Length);
返回数据;
}
私有void GetKey(字符串密码)
{
字节[]salt=新字节[8];
byte[]passwordBytes=Encoding.ASCII.GetBytes(密码);
int length=Math.Min(passwordBytes.length,salt.length);
for(int i=0;i
事实上,您根本不需要使用任何流来处理字节。
您只需要调用ICryptoTransform的TransformFinalBlock()方法,它可以是从SymmetricAlgorithm类派生的任何算法的加密器或解密器
public class CryptoProvider
{
private SymmetricAlgorithm _algorithm = new RijndaelManaged();
public byte[] EncryptData(byte[] data, string password)
{
GetKey(password);
ICryptoTransform encryptor = _algorithm.CreateEncryptor();
byte[] cryptoData = encryptor.TransformFinalBlock(data, 0, data.Length);
return cryptoData;
}
public byte[] DecryptData(byte[] cryptoData, string password)
{
GetKey(password);
ICryptoTransform decryptor = _algorithm.CreateDecryptor();
byte[] data = decryptor.TransformFinalBlock(cryptoData, 0, cryptoData.Length);
return data;
}
private void GetKey(string password)
{
byte[] salt = new byte[8];
byte[] passwordBytes = Encoding.ASCII.GetBytes(password);
int length = Math.Min(passwordBytes.Length, salt.Length);
for (int i = 0; i < length; i++)
salt[i] = passwordBytes[i];
Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(password, salt);
_algorithm.Key = key.GetBytes(_algorithm.KeySize / 8);
_algorithm.IV = key.GetBytes(_algorithm.BlockSize / 8);
}
}
公共类加密提供程序
{
私有对称算法_算法=新的RijndaelManaged();
公共字节[]加密数据(字节[]数据,字符串密码)
{
获取密钥(密码);
ICryptoTransform加密程序=_算法.CreateEncryptor();
byte[]cryptoData=encryptor.TransformFinalBlock(数据,0,数据.长度);
返回加密数据;
}
公共字节[]解密数据(字节[]加密数据,字符串密码)
{
获取密钥(密码);
ICryptoTransform解密程序=_算法。CreateDecryptor();
字节[]数据=解密程序.TransformFinalBlock(cryptoData,0,cryptoData.Length);
返回数据;
}
私有void GetKey(字符串密码)
{
字节[]salt=新字节[8];
byte[]passwordBytes=Encoding.ASCII.GetBytes(密码);
int length=Math.Min(passwordBytes.length,salt.length);
for(int i=0;i