【发布时间】:2017-12-21 04:43:19
【问题描述】:
我被一种加密方法困住了。我对加密或字节数组知之甚少,所以我很难解决这个问题。
这是我的代码:
public static class EncryptDecrypt {
private static byte[] key = { };
private static string sEncryptionKey = "B@|@j!";
private static byte[] IV = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab};
public static string Encrypt(string stringToEncrypt)
{
string returnstring = "";
try
{
key = System.Text.Encoding.UTF8.GetBytes(sEncryptionKey);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.UTF8.GetBytes(stringToEncrypt);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms,
des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
returnstring = Convert.ToBase64String(ms.ToArray());
//URL Encryption Avoid Reserved Characters
returnstring = returnstring.Replace("/", "-2F-");
returnstring = returnstring.Replace("!", "-21-");
returnstring = returnstring.Replace("#", "-23-");
returnstring = returnstring.Replace("$", "-24-");
returnstring = returnstring.Replace("&", "-26-");
returnstring = returnstring.Replace("'", "-27-");
returnstring = returnstring.Replace("(", "-28-");
returnstring = returnstring.Replace(")", "-29-");
returnstring = returnstring.Replace("*", "-2A-");
returnstring = returnstring.Replace("+", "-2B-");
returnstring = returnstring.Replace(",", "-2C-");
returnstring = returnstring.Replace(":", "-3A-");
returnstring = returnstring.Replace(";", "-3B-");
returnstring = returnstring.Replace("=", "-3D-");
returnstring = returnstring.Replace("?", "-3F-");
returnstring = returnstring.Replace("@", "-40-");
returnstring = returnstring.Replace("[", "-5B-");
returnstring = returnstring.Replace("]", "-5D-");
return returnstring;
}
catch (Exception e)
{
return e.Message;
}
}
}
但是每当我将字符串作为string encrypt= EncryptDecrypt.Encrypt("abcd"); 传递时,它都会提供错误Specified key is not a valid size for this algorithm。
如何解决这个问题以及如何通过这种方法加密任何字符串(主要是 1-8 个字符)?
【问题讨论】:
-
"如何解决这个问题" -- 根据错误消息,您似乎应该提供一个 is 有效的键值算法的大小。除此之外,请解决您的问题,以便您包含一个很好的 minimal reproducible example 来重现问题并解释为什么您认为您用于
sEncryptionKey的值应该有效。 -
Base 64 只包含特殊字符
+、/和=。所以不需要替换任何其他字符。如果您确实更换它们,您最好使用base 64 url。密码与密钥不同,如果您生活在 1970 年,使用 DES 当然很好。试试 AES-GCM。
标签: c# algorithm encryption