我尝试DataTable
使用以下函数解密 a 的加密数据。
for (int a = 0; a < dataTable.Columns.Count; a++)
{
if (dataTable.Columns[a].DataType != typeof(String)) continue;
for (int b = 0; b < dataTable.Rows.Count; b++)
{
dataTable.Rows[b][a] = SecurityProtocol.DecryptString(dataTable.Rows[b][a].ToString());
}
}
离开:
| Valor Inicial | Encriptado | Desencriptado |
|------------------------|----------------------------------|------------------------|
|"ITSC" |"aREOeLQEHW0=" |"ITSC" |
|"Desarrollo de software"|"t28FXWcQswHA5FzQq2y8Uc3CMvdQpnQ2"|"Desarrollo de software"|
|"Técnico superior" |"Z9PFyFnDukGzYXs" | >>>> Error <<<< |
但是在尝试解密列时出现错误"Type"
:
Base-64 数组或字符串的长度无效。
我尝试了该功能,string
但没有发生错误。
public void DecryptStringTest()
{
string encriptado1 = SecurityProtocol.EncriptString("ITSC");
string encriptado2 = SecurityProtocol.EncriptString("Desarrollo de software");
string encriptado3 = SecurityProtocol.EncriptString("Técnico superior");
Console.WriteLine(SecurityProtocol.DecryptString(encriptado1));
Console.WriteLine(SecurityProtocol.DecryptString(encriptado2));
Console.WriteLine(SecurityProtocol.DecryptString(encriptado3));
}
离开:
| Valor Inicial | Encriptado | Desencriptado |
|------------------------|----------------------------------|------------------------|
|"ITSC" |"aREOeLQEHW0=" |"ITSC" |
|"Desarrollo de software"|"t28FXWcQswHA5FzQq2y8Uc3CMvdQpnQ2"|"Desarrollo de software"|
|"Técnico superior" |"Z9PFyFnDukGzYXs" |"Técnico superior" |
功能码DecryptString(string toDecrypt)
。
public static string DecryptString(string toDecrypt)
{
//Error con DataRow["Type"].ToString() // Value = "Z9PFyFnDukGzYXs"
//Longitud no válida para una matriz o cadena de caracteres Base-64
byte[] stringInBytes = Convert.FromBase64String(toDecrypt);
byte[] resoult = SecurityProtocol.DecryptTripleDES(stringInBytes);
return Encoding.UTF8.GetString(resoult);
}
我不知道是什么导致了这个问题。如果是字符串,它会给我与我所做的测试相同的错误,但它只发生在 DataTable 上。我希望有一个人可以帮助我。
正如您在第一个加密结果中看到的那样,Base-64具有填充字符,最后它具有字符=,因为它是您在最后一个加密数据中缺少的内容。
可能的原因:
您的数据库可能会截断字符,请检查字段的大小。
要了解是否缺少填充字符或字符串是否被剪切,您必须执行以下操作。
如果满足该条件,则您的加密字符串是错误的,或者只是缺少填充字符。
如您所见,您使用字符串变量进行了测试,这意味着问题必须是数据库中的字符串更改了字段限制。
建议不要限制数据库中的字段,因为我们不知道加密字符串的长度是多少,而 varchar(10) 占用的空间与 varchar(max) 相同。
例如,如果他们想修复链条:
String a="YW55IGNhcm5hbCBwbGVhc3U" ;
在这里我留下这个文档,以便您了解如何处理Base- 64:Base-64