首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >base64编码是否有字符串长度限制?

base64编码是否有字符串长度限制?
EN

Stack Overflow用户
提问于 2019-01-24 16:39:48
回答 1查看 5.1K关注 0票数 1

我有标签应用程序,转换密码使用Base64编码。它通过web服务被发送到web应用程序,在那里它被解码。用于解码的代码是,

代码语言:javascript
运行
复制
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所有用户在解码时都没有问题。

EN

回答 1

Stack Overflow用户

发布于 2019-01-24 16:52:04

对要编码的字符串没有限制(“加密”是一个不同的过程),对结果也没有限制,这取决于您输入了多少个字符(考虑到base64是用来对通过http发送的文件体进行编码的,所以没有限制)。

错误所指的填充是附加到字符串末尾的=。Base64编码获取原始消息,将其划分为字节,然后将比特流分组为6位的段,然后将其转换为字母数字表示形式。当消息的位长不能被6整除时,就会添加这些=

我的猜测是,该字符串在到达Convert.FromBase64String之前发生了一些变化,或者base64编码(在您的示例中缺失)甚至无法工作。

我将编写一个仅包含base64编码/解码的最小示例,以验证此部分是否正常工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54342431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档