尾随数字上的C#DES加密不正确
des加密时会发生不匹配,仅当原始文本具有尾随1,2,3,4时才会发生 我在这里写了一个小提琴手来演示这个问题: 如果您不想重定向,请在此内联附加fiddler代码:尾随数字上的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
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获取数组-用它做一个字符串
-最后,从末尾移除所有盐罐实例
(恰好是您缺少的字符)关闭投票队列注意:已添加代码。关闭投票队列注意:已添加代码。