C#DES加密跟踪号码不正确

问题描述 投票:0回答:1

des加密时发生不匹配,仅在原始文本尾随1,2,3,4时发生。

我在这里写了一个小提琴手来演示这个问题:https://dotnetfiddle.net/7u0Hzr

如果您不想重定向,请在此处附加内联小提琴代码:

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;
        }
    }
}
c# encryption cryptography des
1个回答
2
投票

des加密时发生不匹配,仅在原始文本尾随1,2,3,4时发生。

嗯......我怀疑它发生在ENcryption ......

仔细看看你的DEcryption显示:

return encoding.GetString(Objmst.ToArray()).TrimEnd(salt.ToCharArray());

换一种说法:

- 你从MemoryStream中获取数组 - 从中​​制作一个字符串 - 最后从最后删除所有salt chars的实例

(这恰好是你失踪的角色)

© www.soinside.com 2019 - 2024. All rights reserved.