Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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#DES加密不正确_C#_Encryption_Cryptography_Des - Fatal编程技术网

尾随数字上的C#DES加密不正确

尾随数字上的C#DES加密不正确,c#,encryption,cryptography,des,C#,Encryption,Cryptography,Des,des加密时会发生不匹配,仅当原始文本具有尾随1,2,3,4时才会发生 我在这里写了一个小提琴手来演示这个问题: 如果您不想重定向,请在此内联附加fiddler代码: using System; using System.IO; using System.Text; using System.Security.Cryptography; public class Program { public static void Main() { var key = "a

des加密时会发生不匹配,仅当原始文本具有尾随1,2,3,4时才会发生

我在这里写了一个小提琴手来演示这个问题:

如果您不想重定向,请在此内联附加fiddler代码:

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;

public class Program
{
    public static void Main()
    {
        var key = "abcd1234";
        var salt = "4321";
        var encrypted = "";
        var decrypted = "";
        var alphabets = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();

        for (var i = 0; i < 100; i++)
        {
            var text = $"{Math.Floor((double)i / 10)}{i % 10}";
            encrypted = DesEncrypt(text, key, salt);
            decrypted = DesDecrypt(encrypted, key, salt);
            Console.WriteLine($"Text: {text} | Encrypted: {encrypted} | Decrypted: {decrypted}");
        }
    }


    private static string DesEncrypt(string plaintText, string strKey, string salt)
    {
        byte[] key = { }; //Encryption Key   
        byte[] IV = { 10, 20, 30, 40, 50, 60, 70, 80 };
        byte[] inputByteArray;

        try
        {
            key = Encoding.UTF8.GetBytes(strKey);
            // DESCryptoServiceProvider is a cryptography class defind in c#.  
            DESCryptoServiceProvider ObjDES = new DESCryptoServiceProvider();
            inputByteArray = Encoding.UTF8.GetBytes(plaintText + salt);
            MemoryStream Objmst = new MemoryStream();
            CryptoStream Objcs = new CryptoStream(Objmst, ObjDES.CreateEncryptor(key, IV), CryptoStreamMode.Write);
            Objcs.Write(inputByteArray, 0, inputByteArray.Length);
            Objcs.FlushFinalBlock();

            return Convert.ToBase64String(Objmst.ToArray());//encrypted string  
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
    }
    private static string DesDecrypt(string cipherText, string strKey, string salt)
    {
        byte[] key = { };// Key   
        byte[] IV = { 10, 20, 30, 40, 50, 60, 70, 80 };
        byte[] inputByteArray = new byte[cipherText.Length];

        try
        {
            key = Encoding.UTF8.GetBytes(strKey);
            DESCryptoServiceProvider ObjDES = new DESCryptoServiceProvider();
            inputByteArray = Convert.FromBase64String(cipherText);

            MemoryStream Objmst = new MemoryStream();
            CryptoStream Objcs = new CryptoStream(Objmst, ObjDES.CreateDecryptor(key, IV), CryptoStreamMode.Write);
            Objcs.Write(inputByteArray, 0, inputByteArray.Length);
            Objcs.FlushFinalBlock();

            Encoding encoding = Encoding.UTF8;
            return encoding.GetString(Objmst.ToArray()).TrimEnd(salt.ToCharArray());
        }
        catch (System.Exception ex)
        {
            if (ex is FormatException) Console.WriteLine("The token is in the wrong format");
            if (ex is System.Security.Cryptography.CryptographicException) Console.WriteLine("Invalid token");
            throw ex;
        }
    }
}
使用系统;
使用System.IO;
使用系统文本;
使用System.Security.Cryptography;
公共课程
{
公共静态void Main()
{
var key=“abcd1234”;
var salt=“4321”;
var=”;
var decrypted=“”;
var alphabets=“abcdefghijklmnopqrstuvxyz”.ToCharArray();
对于(变量i=0;i<100;i++)
{
var text=$“{Math.Floor((double)i/10)}{i%10}”;
加密=取消加密(文本、密钥、salt);
解密=去解密(加密、密钥、salt);
WriteLine($“Text:{Text}加密:{Encrypted}解密:{Decrypted}”);
}
}
私有静态字符串去加密(字符串明文、字符串strKey、字符串salt)
{
byte[]key={};//加密密钥
字节[]IV={10,20,30,40,50,60,70,80};
字节[]inputByteArray;
尝试
{
key=Encoding.UTF8.GetBytes(strKey);
//DESCryptoServiceProvider是c#中定义的加密类。
DESCryptoServiceProvider ObjDES=新的DESCryptoServiceProvider();
inputByteArray=Encoding.UTF8.GetBytes(明文+salt);
MemoryStream Objmst=新的MemoryStream();
CryptoStream Objcs=新加密流(Objmst,ObjDES.CreateEncryptor(key,IV),CryptoStreamMode.Write);
写入(inputByteArray,0,inputByteArray.Length);
Objcs.FlushFinalBlock();
返回Convert.ToBase64String(Objmst.ToArray());//加密字符串
}
catch(System.Exception-ex)
{
掷骰子;
}
}
私有静态字符串去解密(字符串密文、字符串strKey、字符串salt)
{
字节[]键={};//键
字节[]IV={10,20,30,40,50,60,70,80};
byte[]inputByteArray=新字节[cipherText.Length];
尝试
{
key=Encoding.UTF8.GetBytes(strKey);
DESCryptoServiceProvider ObjDES=新的DESCryptoServiceProvider();
inputByteArray=Convert.FromBase64String(密文);
MemoryStream Objmst=新的MemoryStream();
CryptoStream Objcs=新的CryptoStream(Objmst,ObjDES.CreateDecryptor(key,IV),CryptoStreamMode.Write);
写入(inputByteArray,0,inputByteArray.Length);
Objcs.FlushFinalBlock();
编码=Encoding.UTF8;
返回encoding.GetString(Objmst.ToArray()).TrimEnd(salt.toCharray());
}
catch(System.Exception-ex)
{
if(ex是FormatException)Console.WriteLine(“令牌格式错误”);
if(ex是System.Security.Cryptography.CryptographyException)Console.WriteLine(“无效令牌”);
掷骰子;
}
}
}
des加密时发生错误匹配,仅当原始文本 有尾随的1,2,3,4

嗯。。。我怀疑这会发生在加密中

仔细查看您的解密显示:

return encoding.GetString(Objmst.ToArray()).TrimEnd(salt.ToCharArray());
换言之:

-您可以从MemoryStream获取数组
-用它做一个字符串
-最后,从末尾移除所有盐罐实例

(正好是你丢失的角色)

des加密时发生错误匹配,仅当原始文本 有尾随的1,2,3,4

嗯。。。我怀疑这会发生在加密中

仔细查看您的解密显示:

return encoding.GetString(Objmst.ToArray()).TrimEnd(salt.ToCharArray());
换言之:

-您可以从MemoryStream获取数组
-用它做一个字符串
-最后,从末尾移除所有盐罐实例


(恰好是您缺少的字符)

关闭投票队列注意:已添加代码。关闭投票队列注意:已添加代码。