Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET加密bytearray_C#_.net_Encryption - Fatal编程技术网

C# .NET加密bytearray

C# .NET加密bytearray,c#,.net,encryption,C#,.net,Encryption,有没有办法不使用流来加密bytearray???好吧,您可以编写自己的加密算法-但只需使用内置的流式API写入,然后使用将其转换为字节数组就容易多了。好吧,您可以编写自己的加密算法,但只需使用内置的流式API写入,然后使用将其转换为字节数组,就容易多了。如果您关心磁盘I/O,可以使用MemoryStream 但是,RSACryptServiceProvider类将在字节数组上操作。此类使用RSA算法的实现执行非对称加密和解密 示例显示了如何使用字节数组执行此操作如果您关心磁盘I/O,可以使用Me

有没有办法不使用流来加密bytearray???

好吧,您可以编写自己的加密算法-但只需使用内置的流式API写入,然后使用将其转换为字节数组就容易多了。

好吧,您可以编写自己的加密算法,但只需使用内置的流式API写入,然后使用将其转换为字节数组,就容易多了。

如果您关心磁盘I/O,可以使用MemoryStream

但是,RSACryptServiceProvider类将在字节数组上操作。此类使用RSA算法的实现执行非对称加密和解密


示例显示了如何使用字节数组执行此操作如果您关心磁盘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