Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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# 3DES不能为同一密文上的多次迭代生成一致的解密_C#_Encryption_3des_Tripledes - Fatal编程技术网

C# 3DES不能为同一密文上的多次迭代生成一致的解密

C# 3DES不能为同一密文上的多次迭代生成一致的解密,c#,encryption,3des,tripledes,C#,Encryption,3des,Tripledes,我在代码中实现了一个3DES(TripleDES)解密例程,并注意到当提供的密文与上一次迭代相同时,它不会产生相同的明文。这似乎是不确定的,我肯定这是我做错了 我尝试过CBC(第四次调零)、ECB、多种处置和清算组合。我似乎无法获得一致的输出 (由于某些原因,下面“代码”和“输出”上的代码格式显示不正确,抱歉) 代码 使用系统; 使用System.Security.Cryptography; 使用系统线程; 名称空间测试 { 班级计划 { 静态void Main(字符串[]参数) { while

我在代码中实现了一个3DES(TripleDES)解密例程,并注意到当提供的密文与上一次迭代相同时,它不会产生相同的明文。这似乎是不确定的,我肯定这是我做错了

我尝试过CBC(第四次调零)、ECB、多种处置和清算组合。我似乎无法获得一致的输出

(由于某些原因,下面“代码”和“输出”上的代码格式显示不正确,抱歉)

代码

使用系统;
使用System.Security.Cryptography;
使用系统线程;
名称空间测试
{
班级计划
{
静态void Main(字符串[]参数)
{
while(true)
{
字符串键=“27F66D5244FF621EAA6F6120EDEB427F”;
字符串密码=“C25C1D1197D31CAA87285D59A892047426D9182EC11353C051ADD6D0F072A6CB3436560B3071FC1FD11D9F7E74886742D9BEE0CFD1EA064C213BB55278B2F12”;
Console.WriteLine(“清除:+字节\数组\到\十六进制\字符串(
解密(
十六进制字符串到字节数组(密码),
十六进制字符串到字节数组(键)
),对,对
));
控制台。写线(“”);
睡眠(1000);
}
}
静态字节[]解密(字节[]密码,字节[]密钥)
{
if(cipher==null)返回null;
如果(key==null)返回null;
int num_chunks=(cipher.Length)/8;
Console.WriteLine(“输入解密”);
WriteLine(“-cipher:+字节数组到十六进制字符串(cipher,true,true));
WriteLine(“-key:+字节数组到十六进制字符串(key,true,true));
Console.WriteLine(“-cipher-length:+cipher.length”);
Console.WriteLine(“-key-length:+key.length”);
如果((cipher.Length%8)!=0)
{
Console.WriteLine(“密码长度不能被8整除”);
返回null;
}
如果((键长度%8)!=0)
{
Console.WriteLine(“键长度不能被8整除”);
返回null;
}
TripleDESCryptoServiceProvider tdes=新的TripleDESCryptoServiceProvider();
tdes.Key=Key;
tdes.Mode=CipherMode.ECB;
tdes.IV=新字节[]{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
tdes.Padding=PaddingMode.zero;
tdes.KeySize=(key.Length*8);
ICryptoTransform ct=tdes.CreateDecryptor();
WriteLine(“-IV:+字节数组到十六进制字符串(tdes.IV,true,true));
字节[]清除=新字节[(密码长度)];
clear=ct.TransformFinalBlock(密码,0,密码长度);
WriteLine(“-clear:+字节数组到十六进制字符串(clear,true,true));
tdes.Clear();
tdes.Dispose();
ct.Dispose();
返回清晰;
}
公共静态字节[]十六进制字符串到字节数组(字符串十六进制)
{
整数字符=十六进制长度;
byte[]bytes=新字节[number_chars/2];
对于(int i=0;i=0;i--)
{
如果(十六进制字符计数==0)
{
十六进制空格+=十六进制破折号[i];
十六进制字符计数++;
继续;
}
如果(十六进制字符计数%16==0)
{
十六进制空间=(十六进制虚线[i]+“”+十六进制空间);
十六进制字符计数++;
继续;
}
十六进制空格=十六进制虚线[i]+十六进制空格;
十六进制字符计数++;
}
返回十六进制空间;
}
其他的
{
返回十六进制破折号;
}
}
}
}
输出

Entering decrypt_3des - cipher: C25C1D1197D31CAA 87285D59A8920474 26D9182EC11353C0 51ADD6D0F072A6CB 3436560B3071FC1F D11D9F7E74886742 D9BEE0C FD1EA1064 C213BB55278B2F12 - key: 27F66D5244FF621E AA6F6120EDEB427F - cipher length: 64 - key length: 16 - IV: 10F99E2232BEC7F4 - clear: BF3CBF923E6C0E19 DBBB64E0FCBBFBB9 4CA3D68F117BE51F 0C1294CEC85470B6 6A799CC5D914F427 30D0C47BC9E6340C BD8E4C2E 6E5819ED 23125066DBA83477 clear: BF3CBF923E6C0E19 DBBB64E0FCBBFBB9 4CA3D68F117BE51F 0C1294CEC85470B6 6A799CC5D914F427 30D0C47BC9E6340C BD8E4C2E6E5 819ED 23125066DBA83477 Entering decrypt_3des - cipher: C25C1D1197D31CAA 87285D59A8920474 26D9182EC11353C0 51ADD6D0F072A6CB 3436560B3071FC1F D11D9F7E74886742 D9BEE0C FD1EA1064 C213BB55278B2F12 - key: 27F66D5244FF621E AA6F6120EDEB427F - cipher length: 64 - key length: 16 - IV: 32B9C802333CFBB4 - clear: A878F23C3AF5E724 2ACB3458F8D68E68 9BE4F6C007F24FD2 9AF4CE98239A4F2C 5710633D88266AFD 77EF88A7B09485D9 F07C33D7 08832E90 77382A7A51A532C1 clear: A878F23C3AF5E724 2ACB3458F8D68E68 9BE4F6C007F24FD2 9AF4CE98239A4F2C 5710633D88266AFD 77EF88A7B09485D9 F07C33D7088 32E90 77382A7A51A532C1 Entering decrypt_3des - cipher: C25C1D1197D31CAA 87285D59A8920474 26D9182EC11353C0 51ADD6D0F072A6CB 3436560B3071FC1F D11D9F7E74886742 D9BEE0C FD1EA1064 C213BB55278B2F12 - key: 27F66D5244FF621E AA6F6120EDEB427F - cipher length: 64 - key length: 16 - IV: 2FCB1A9F5B502E1B - clear: 80B7302520ACA111 223BF99421EFDA2C 60CABCB3C632A61C 3422552A07B582B7 E50E44E38DEDC300 DD9A6EB5CF3C0A63 E512FAC0 C04D3EC5 EEC551C3E845BF80 clear: 80B7302520ACA111 223BF99421EFDA2C 60CABCB3C632A61C 3422552A07B582B7 E50E44E38DEDC300 DD9A6EB5CF3C0A63 E512FAC0C04 D3EC5 EEC551C3E845BF80 Entering decrypt_3des - cipher: C25C1D1197D31CAA 87285D59A8920474 26D9182EC11353C0 51ADD6D0F072A6CB 3436560B3071FC1F D11D9F7E74886742 D9BEE0C FD1EA1064 C213BB55278B2F12 - key: 27F66D5244FF621E AA6F6120EDEB427F - cipher length: 64 - key length: 16 - IV: 355096FE3CA1E9A1 - clear: E4EDCDC436745A51 42FE9D0C71933080 6DFCAACE07FBCC22 0F5C9AF9082C8264 870362982FF90CA4 665E312FC1A8D264 DDBB27B7 3B30840E 6030D791CD849A3D clear: E4EDCDC436745A51 42FE9D0C71933080 6DFCAACE07FBCC22 0F5C9AF9082C8264 870362982FF90CA4 665E312FC1A8D264 DDBB27B73B3 0840E 6030D791CD849A3D 输入解密\u 3des -密码:C25C1D1197D31CAA 87285D59A8920474 26D9182EC11353C0 51ADD6D0F072A6CB 3436560B3071FC1F D11D9F7E74886742 D9BEE0C FD1EA1064 C213BB55278B2F12 -钥匙:27F66D5244FF621E AA6F6120EDEB427F -密码长度:64 -键长:16 -IV:10F99E2232BEC7F4 -清除:BF3CBF923E6C0E19 DBBB64E0FCBBFBB9 4CA3D68F117BE51F 0C1294CEC85470B6 6A799CC5D914F427 30D0C47BC9E6340C BD8E4C2E 6E5819ED 23125066DBA83477 清除:BF3CBF923E6C0E19 DBBB64E0FCBBFBB9 4CA3D68F117BE51F 0C1294CEC85470B6 6A799CC5D914F427 30D0C47BC9E6340C BD8E4C2E6E5 819ED 23125066DBA83477 输入解密\u 3des -密码:C25C1D1197D31CAA 87285D59A8920474 26D9182EC11353C0 51ADD6D0F072A6CB 3436560B3071FC1F D11D9F7E74886742 D9BEE0C FD1EA1064 C213BB55278B2F12 -钥匙:27F66D5244FF621E AA6F6120EDEB427F -密码长度:64 -键长:16 -IV:32B9C802333CFBB4 -清除:A878F23C3AF5E724 2ACB3458F8D68E68 9BE4F6C007F24FD2 9AF4CE98239A4F2C 5710633D88266AFD 77EF88A7B09485D9 F07C33D7 08832E90 77382A7A51A532C1 清除:A878F23C3AF5E724 2ACB3458F8D68E68 9BE4F6C007F24FD2 9AF4CE98239A4F2C 5710633D88266AFD 77EF88A7B09485D9 F07C33D7088 32E90 77382A7A51A532C1 Entering decrypt_3des - cipher: C25C1D1197D31CAA 87285D59A8920474 26D9182EC11353C0 51ADD6D0F072A6CB 3436560B3071FC1F D11D9F7E74886742 D9BEE0C FD1EA1064 C213BB55278B2F12 - key: 27F66D5244FF621E AA6F6120EDEB427F - cipher length: 64 - key length: 16 - IV: 10F99E2232BEC7F4 - clear: BF3CBF923E6C0E19 DBBB64E0FCBBFBB9 4CA3D68F117BE51F 0C1294CEC85470B6 6A799CC5D914F427 30D0C47BC9E6340C BD8E4C2E 6E5819ED 23125066DBA83477 clear: BF3CBF923E6C0E19 DBBB64E0FCBBFBB9 4CA3D68F117BE51F 0C1294CEC85470B6 6A799CC5D914F427 30D0C47BC9E6340C BD8E4C2E6E5 819ED 23125066DBA83477 Entering decrypt_3des - cipher: C25C1D1197D31CAA 87285D59A8920474 26D9182EC11353C0 51ADD6D0F072A6CB 3436560B3071FC1F D11D9F7E74886742 D9BEE0C FD1EA1064 C213BB55278B2F12 - key: 27F66D5244FF621E AA6F6120EDEB427F - cipher length: 64 - key length: 16 - IV: 32B9C802333CFBB4 - clear: A878F23C3AF5E724 2ACB3458F8D68E68 9BE4F6C007F24FD2 9AF4CE98239A4F2C 5710633D88266AFD 77EF88A7B09485D9 F07C33D7 08832E90 77382A7A51A532C1 clear: A878F23C3AF5E724 2ACB3458F8D68E68 9BE4F6C007F24FD2 9AF4CE98239A4F2C 5710633D88266AFD 77EF88A7B09485D9 F07C33D7088 32E90 77382A7A51A532C1 Entering decrypt_3des - cipher: C25C1D1197D31CAA 87285D59A8920474 26D9182EC11353C0 51ADD6D0F072A6CB 3436560B3071FC1F D11D9F7E74886742 D9BEE0C FD1EA1064 C213BB55278B2F12 - key: 27F66D5244FF621E AA6F6120EDEB427F - cipher length: 64 - key length: 16 - IV: 2FCB1A9F5B502E1B - clear: 80B7302520ACA111 223BF99421EFDA2C 60CABCB3C632A61C 3422552A07B582B7 E50E44E38DEDC300 DD9A6EB5CF3C0A63 E512FAC0 C04D3EC5 EEC551C3E845BF80 clear: 80B7302520ACA111 223BF99421EFDA2C 60CABCB3C632A61C 3422552A07B582B7 E50E44E38DEDC300 DD9A6EB5CF3C0A63 E512FAC0C04 D3EC5 EEC551C3E845BF80 Entering decrypt_3des - cipher: C25C1D1197D31CAA 87285D59A8920474 26D9182EC11353C0 51ADD6D0F072A6CB 3436560B3071FC1F D11D9F7E74886742 D9BEE0C FD1EA1064 C213BB55278B2F12 - key: 27F66D5244FF621E AA6F6120EDEB427F - cipher length: 64 - key length: 16 - IV: 355096FE3CA1E9A1 - clear: E4EDCDC436745A51 42FE9D0C71933080 6DFCAACE07FBCC22 0F5C9AF9082C8264 870362982FF90CA4 665E312FC1A8D264 DDBB27B7 3B30840E 6030D791CD849A3D clear: E4EDCDC436745A51 42FE9D0C71933080 6DFCAACE07FBCC22 0F5C9AF9082C8264 870362982FF90CA4 665E312FC1A8D264 DDBB27B73B3 0840E 6030D791CD849A3D
    static byte[] decrypt_3des(byte[] cipher, byte[] key)
    {
        byte[] clear;
        TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
        tdes.Key = key;
        tdes.Mode = CipherMode.CBC;
        tdes.Padding = PaddingMode.None;
        tdes.IV = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

        try
        {
            ICryptoTransform ic = tdes.CreateDecryptor();
            clear = ic.TransformFinalBlock(cipher, 0, cipher.Length);
        }
        finally
        {
            tdes.Clear();
        }
        return clear;
    }