2

次の関数を使用して文字列を暗号化しています。

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暗号化文字列の長さはどのくらいになりますか?

4

2 に答える 2

3

15文字の文字列は少なくとも15バイトになります。非ASCII文字がたくさんある場合は、20または30になる可能性があります。

暗号化により、キーブロックサイズの倍数、たとえば64バイトに切り上げられます。

次に、Base64は8ビットバイトを6ビットトークンにエンコードするため、(64 * 8)/ 6トークン(文字)を取得します。

于 2012-09-20T16:55:11.707 に答える
2

はい。あなたはそれを計算することができます。

a)DES暗号化はブロックを使用します。私が覚えているように、それは8バイトです。したがって、何かを暗号化すると、ブロックサイズに丸められます。

  • たとえば、1バイトを暗号化すると、8バイトになります。
  • 8バイトを暗号化すると8バイトになります
  • 9バイトを暗号化すると、16バイトになります(元のデータに合う最小ブロック量)

したがって、正式な暗号化された長さ=天井(元の長さ/ 8)* 8

b)Base64にも、ブロックサイズと非常によく似たものがあります。そして、そのブロックサイズは4です。元の各3バイトは4バイトのブロックに変換されます

したがって、Base64の 場合encodedLength = Crown(originalLength / 3)* 4

したがって、最終的な式は次のとおりです。

エンコードされた暗号化された長さ=ceiling(ceiling(originalLength / 8)* 8/3)* 4

ここでのoriginalLengthは、暗号化する予定のテキストのバイト数(!!!文字ではありません!!!)です。

于 2012-09-20T16:59:32.583 に答える