当前位置: 首页 > 知识库问答 >
问题:

Base-64字符数组或字符串的长度无效

范承教
2023-03-14
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Security.Cryptography;
 using System.IO;
 namespace AccountSystem.Class{
class ClEncrDecr
{
    private TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider();

    private byte[] TruncateHash(string key, int length)
    {
        SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
        //Hash the Key
        byte[] keyBytes = System.Text.Encoding.Unicode.GetBytes(key);
        byte[] hash = sha1.ComputeHash(keyBytes);

        // truncate or pad the hash
        Array.Resize(ref hash, length);
        return hash;
    }

    public ClEncrDecr()
    {
        string key = "ABCD";
        tripleDESCryptoServiceProvider.Key = TruncateHash(key, tripleDESCryptoServiceProvider.KeySize / 8 );
        tripleDESCryptoServiceProvider.IV = TruncateHash("", tripleDESCryptoServiceProvider.BlockSize / 8 );
    }

    public string EncryptData(string plainText)
    {
        byte[] plaintextBytes = System.Text.Encoding.Unicode.GetBytes(plainText);
        MemoryStream ms = new MemoryStream();
        CryptoStream encStream = new CryptoStream(ms, tripleDESCryptoServiceProvider.CreateEncryptor(), System.Security.Cryptography.CryptoStreamMode.Write);
        encStream.Write(plaintextBytes, 0, plaintextBytes.Length);
        encStream.FlushFinalBlock();
        return Convert.ToBase64String(ms.ToArray());
    }

    public string DecryptData(string encryptedtext)
    {
        byte[] encryptedBytes = Convert.FromBase64String(encryptedtext);
        MemoryStream ms = new MemoryStream();
        CryptoStream decStream = new CryptoStream(ms, tripleDESCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write);
        decStream.Write(encryptedBytes, 0, encryptedBytes.Length);
        decStream.FlushFinalBlock();
        return System.Text.Encoding.Unicode.GetString(ms.ToArray());
    }
}
}
MessageBox.Show(crypto.DecryptData(obj.password))

当我们调用decryptdata(string encryptedtext)时,它会抛出一个异常,说明Base-64字符数组或字符串的长度无效。我能做什么?

共有1个答案

华宪
2023-03-14

如果您有以下加密密码:

667878NNVGHV

它不能从Base64转换为字节数组,因为它不是有效的Base64String。有效的Base64String为:

 类似资料:
  • 在使用Cordova Plugin FileReader转换pdf文件并将其发送到.Net服务器后,服务器在将base64字符串转换为字节数组时抛出错误“输入不是有效的Base-64字符串,因为它包含非base64字符、两个以上的填充字符或填充字符中的非法字符。”。 Java脚本代码: C#代码: Base64字符串开头: data:application/pdf;base64,JVBERi0xL

  • 我有一个REST服务,它读取一个文件,并在将其转换为字节数组后将其发送到另一个控制台应用程序,然后将其转换为Base64字符串。这部分有效,但是当应用程序接收到相同的流时,它会被操纵,不再是有效的Base64字符串。一些垃圾字符被引入到流中。 将流转换回Byte时收到的异常为 输入不是有效的Base-64字符串,因为它包含非基64字符、两个以上的填充字符或填充字符中的非空白字符 服务时: 在申请时

  • 我正在使用< code>Convert。FromBase64String()用于解码base 64编码的字符串。该字符串实际上是一个XML文件,其中包含base 64编码的图像。例如 我遇到以下异常: 系统。格式异常:输入不是有效的Base-64字符串,因为它包含一个非基本64字符、两个以上的填充字符或填充字符中的非法字符。 问题出在哪里?双基数64编码?字符串?在线工具根本没有问题。 编辑: 现

  • 我希望用户首先选择要键入的单词数,然后将单词数相加(例如Hello and bye=5 3=所有行的总长度为8),但我不知道如何将数组中的所有元素相加。 我的代码: 谢谢你的帮助

  • 我正在努力解决一个关于正则表达式的小问题。 我想用另一个长度相同但字符不同的子字符串替换特定字符的所有奇数长度子字符串。指定字符的所有偶数序列应保持不变。 一个字符串包含字母a、b和y,y的所有奇数长度序列都应替换为z: 另一个可能的例子是: 变成 使用正则表达式匹配所有奇数长度的序列没有问题。 不幸的是,我不知道如何将这些匹配的长度信息合并到替换字符串中。我知道我必须以某种方式使用反向引用/捕获

  • 要求出字符串的长度(字符的个数),我们可以使用length函数。调用这个函数的语法和我们前面看到的有点不同: int length; length = fruit.length(); 对于这种函数调用,我们称之为在字符串变量fruit上**调用(invoke)**length函数。“调用(invoke)”这个词可能看起来有点奇怪,但是后面我们还会遇到很多在对象上调用函数的例子。 函数调用的语法称