Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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# 使用安全密钥C进行DES编码#_C#_.net_Encryption_Des - Fatal编程技术网

C# 使用安全密钥C进行DES编码#

C# 使用安全密钥C进行DES编码#,c#,.net,encryption,des,C#,.net,Encryption,Des,我知道这可能是一个常见的问题,但我在任何地方都找不到答案。因此,我有字节数组密钥和字节数组值,我需要生成新的8字节数组,该数组已经用C#中的DES加密,这是您的示例代码。记住用随机数据填充trailig零,记住写入的字节,以及DES parametrs:Key,IV 最良好的祝愿;) 使用System.Security.Cryptography; 使用System.IO; 名称空间散列 { 公共静态类程序 { 静态void Main(字符串[]参数) { 字节[]数据=新字节[10000]; D

我知道这可能是一个常见的问题,但我在任何地方都找不到答案。因此,我有字节数组密钥和字节数组值,我需要生成新的8字节数组,该数组已经用C#

中的DES加密,这是您的示例代码。记住用随机数据填充trailig零,记住写入的字节,以及DES parametrs:Key,IV

最良好的祝愿;)

使用System.Security.Cryptography;
使用System.IO;
名称空间散列
{
公共静态类程序
{
静态void Main(字符串[]参数)
{
字节[]数据=新字节[10000];
DES=DES.Create();
int字节数=0;
数据=编码(数据、des、out字节写入);
}
专用静态字节[]编码(字节[]数据,DES DES,out int字节写入)
{
使用(var输入=新内存流(数据))
使用(var output=newmemoryStream())
使用(var csp=new DESCryptoServiceProvider())
使用(var encStream=newcryptostream(输出,csp.CreateEncryptor(des.Key,des.IV),CryptoStreamMode.Write))
{
整数长度=0;
字节[]缓冲区=新字节[256];
字节数=0;
而((长度=input.Read(缓冲区,0,256))>0)
{
如果(长度<256)
{
字节[]pad=新字节[256];
使用(var rng=RNGCryptoServiceProvider.Create())
{
rng.GetBytes(pad);
对于(int i=0;i<256-长度;i++)
{
缓冲区[长度+i]=焊盘[i];
}
}
写入(缓冲区,0,长度);
字节写入+=长度;
打破
}
写入(缓冲区,0,256);
字节写入+=长度;
}
返回输出.ToArray();
}
}
}
}

这就是我要找的:D:D…谢谢你:D

   private static byte[] Encrypt(byte[] value, byte[] key)
    {
        DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider
                                                      {
                                                          Mode = CipherMode.ECB,
                                                          Padding = PaddingMode.None
                                                      };

        MemoryStream memoryStream = new MemoryStream();

        CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(key, key), CryptoStreamMode.Write);

        cryptoStream.Write(value, 0, value.Length);
        cryptoStream.Close();

        return memoryStream.ToArray();
    }

今天有什么事吗?没有,但我找不到确切的方法。我有密钥和值以及用该密钥加密的新数组,但在我的代码中无法得到相同的结果。@Darin Hey@Darin,@gore,这些谷歌搜索结果中唯一一个这样的帖子不是直接的欺骗。因此,这是一个非常有效的问题。请注意,在许多加密模式下,加密文本比明文长。首先,您应该始终关注代码中的内存占用,这就是为什么您应该在FW对象中使用using语句,并使用IDisposable接口实现,这是正确的,因为若FW类使用IDisposable接口,在99%的情况下,它将使用非托管资源,如句柄(也满足内存句柄)、资源等。在某些情况下,您可以通知依赖对象在退出特定流时强制关闭(),但这比规则更为例外。其次,请不要重写我已经编写的代码。而且,在密码学中,代码越少越好;)@Artur虽然你关于
IDisposable
的观点是正确的,但人们可以自由地写类似的答案。@Marc Gravell:没关系,我在想其他事情,我已经学会了所有的技巧和技巧,比如盗取答案、重写、推错答案、插脚和其他人们做的肮脏事情;)有时,当一群白痴尊重其他用户的高评价但不正确的回答时,这看起来真的很愚蠢。奇怪的是,有时甚至连工业怪兽(埃里克)都不明白,甚至在他们的回答中都没有提到最简单的事情;)很好:您添加了using子句,并且没有过多的嵌套!很多人忘记了这一点,或者让连续使用嵌套…@eamonnerbanne:希望有一天它会被标记为正确答案;)
   private static byte[] Encrypt(byte[] value, byte[] key)
    {
        DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider
                                                      {
                                                          Mode = CipherMode.ECB,
                                                          Padding = PaddingMode.None
                                                      };

        MemoryStream memoryStream = new MemoryStream();

        CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateEncryptor(key, key), CryptoStreamMode.Write);

        cryptoStream.Write(value, 0, value.Length);
        cryptoStream.Close();

        return memoryStream.ToArray();
    }