我有标签应用程序,转换密码使用Base64编码。它通过web服务被发送到web应用程序,在那里它被解码。用于解码的代码是,
public static string DecryptStringPassword(string base64StringToDecrypt)
{
//Set up the encryption objects
using (AesCryptoServiceProvider acsp = GetProvider(Encoding.Default.GetBytes(Key)))
{
byte[] RawBytes = Convert.FromBase64String(base64StringToDecrypt);
ICryptoTransform ictD = acsp.CreateDecryptor();
//RawBytes now contains original byte array, still in Encrypted state
//Decrypt into stream
MemoryStream msD = new MemoryStream(RawBytes, 0, RawBytes.Length);
CryptoStream csD = new CryptoStream(msD, ictD, CryptoStreamMode.Read);
//csD now contains original byte array, fully decrypted
//return the content of msD as a regular string
return (new StreamReader(csD)).ReadToEnd();
}
}
private static AesCryptoServiceProvider GetProvider(byte[] key)
{
AesCryptoServiceProvider result = new AesCryptoServiceProvider();
result.BlockSize = 128;
result.KeySize = 128;
result.Mode = CipherMode.CBC;
result.Padding = PaddingMode.PKCS7;
result.GenerateIV();
result.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
byte[] RealKey = GetKey(key, result);
result.Key = RealKey;
// result.IV = RealKey;
return result;
}
private static byte[] GetKey(byte[] suggestedKey, SymmetricAlgorithm p)
{
byte[] kRaw = suggestedKey;
List<byte> kList = new List<byte>();
for (int i = 0; i < p.LegalKeySizes[0].MinSize; i += 8)
{
kList.Add(kRaw[(i / 8) % kRaw.Length]);
}
byte[] k = kList.ToArray();
return k;
}
base64编码有最大字符数限制吗?因为其中一个密码"xwYgqg8+xnynU7MpceOoJw==“是加密的字符串,在使用上面的代码解码时,会给出异常的”填充无效,无法删除“。在DecryptStringPassword()函数的最后一行,return (new StreamReader(csD)).ReadToEnd();给出了异常。
同样的密码我加密使用AES加密,它给了我"xwYgqg8+xnynU7MpceOoJ70HuRIIw+OkcDPBVa18mLw=“这么大的加密密码相比,base64编码,这不会给任何例外,而解码。
base64编码对长度始终为24个字符的加密字符串是否有任何限制,或者对要加密的字符串是否有任何长度限制。
我们的其中一个用户在解码密码时遇到了这个问题。Rest所有用户在解码时都没有问题。
发布于 2019-01-24 16:52:04
对要编码的字符串没有限制(“加密”是一个不同的过程),对结果也没有限制,这取决于您输入了多少个字符(考虑到base64是用来对通过http发送的文件体进行编码的,所以没有限制)。
错误所指的填充是附加到字符串末尾的=
。Base64编码获取原始消息,将其划分为字节,然后将比特流分组为6位的段,然后将其转换为字母数字表示形式。当消息的位长不能被6整除时,就会添加这些=
。
我的猜测是,该字符串在到达Convert.FromBase64String
之前发生了一些变化,或者base64编码(在您的示例中缺失)甚至无法工作。
我将编写一个仅包含base64编码/解码的最小示例,以验证此部分是否正常工作。
https://stackoverflow.com/questions/54342431
复制相似问题