【问题标题】:Trying to get the length of an encrypted string试图获取加密字符串的长度
【发布时间】:2012-09-13 02:00:08
【问题描述】:

我正在使用以下函数来加密一个字符串:

public string Encrypt(string stringToEncrypt, string SEncryptionKey)
{
try {
    key = System.Text.Encoding.UTF8.GetBytes(Strings.Left(SEncryptionKey, 8));
    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    byte[] inputByteArray = Encoding.UTF8.GetBytes(stringToEncrypt);
    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
    cs.Write(inputByteArray, 0, inputByteArray.Length);
    cs.FlushFinalBlock();
    return Convert.ToBase64String(ms.ToArray());
} catch (Exception e) {
    return e.Message;
    }
}

我想知道是否有某种数学算法可以让我提前确定 Base64 加密字符串的长度。那么如果我的字符串长度为 15 个字符,那么 Base64 加密字符串的长度会是多少呢?

【问题讨论】:

  • 您对key 成员的使用有点令人担忧。还有你的 using 语句在哪里?
  • @Jodrell -- 我同时使用这两种方法。我是 DES 加密它,然后 base64 编码它。
  • @ChaosPandion -- 它正在进行中。我的“密钥”正在获取传入加密密钥的最左边 8 个字节
  • @Jodrell,不确定您的评论是什么 - 输入字符串,输出 *DES*+base64 字符串。问题可以有更简单的示例(删除 Base64,因为它的乘数是已知的),但即使是现在,也有真正的加密。
  • 我还认为返回异常消息会使 API 混乱。调用者是否应该编写解析逻辑来确定是否引发了错误?

标签: c# encryption base64 des


【解决方案1】:

15 个字符的字符串至少有 15 个字节。如果你有很多非 ASCII 字符,它可能会变成 20 甚至 30。

加密会将其四舍五入为 key 块大小的倍数,比如 64 字节。

然后 Base64 将 8 位字节编码为 6 位令牌,因此您得到 (64 * 8) / 6 个令牌(字符)。

【讨论】:

  • +1。很好地抓住了 UTF8。如果提前知道大小很重要 - 请改用 UTF16... 附带问题:DES 在哪里(如果)存储原始数组大小(因为它可能会改变最终大小计算)?
  • 原始大小也会被加密,你不会发现它有用。
  • 2Henk:你在几件事上错了。 DES 的块大小是 64 位(不是 64 字节)。此外,8/6 计算是粗略的近似,因为如果编码字节数不能被 3 整除,Base64 将添加填充。
【解决方案2】:

是的。你可以计算一下。

a) DES 加密使用块。我记得它是8个字节。因此,如果您加密任何内容,它将被四舍五入到块大小。

  • 例如,你加密 1 个字节,它会变成 8 个字节。
  • 你加密了8个字节,会变成8个字节
  • 你加密 9 个字节,它会变成 16 个字节(适合原始数据的最小块数)

所以,形式 encryptedLength = 上限 (originalLength /8) * 8

b) Base64 也有一些与块大小非常相似的东西。并且它的块大小是4。每个原来的3个字节将被转换为4个字节的块

所以,对于 Base64 encodedLength = 上限 (originalLength/3)*4

所以,最终的公式是

encodedEncryptedLength = 天花板(天花板(originalLength/8)*8/3)*4

这里的 originalLength 是您计划加密的文本中的字节数(!!!不是字符!!!)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多