2

XXXX-XXXX-XXXX のようなロック解除キーを生成しようとしましたが、単純に短い文字列や Hexstring を生成しようとしました。キーの暗号化と復号化に RSA アルゴリズムを使用しています。次のような長い文字列を取得しました

Q65g2+uiytyEUW5SFsiI/c5z9NSxyuU2CM1SEly6cAVv9PdTpH81XaWS8lITcaTZ4IjdmINwhHBosvt5kdg==

以下の convert メソッドを使用してバイト配列 (配列サイズは 64 バイト) を変換すると。

Convert.ToBase64String(bytes); 

私の要件は、最小限の長さのキーを生成することです。バイト配列 (配列サイズは 64 バイト) を最小の長さに変換する方法はありますか?バイト配列に戻すか、(文字列の長さを最小限に抑えるための) その他の提案が必要です。

出力文字列を 16 進数に変換しようとしましたが、出力が文字列よりも長すぎます。

4

3 に答える 3

1

任意のGUIDを読み取り可能なASCII(33-127)にエンコードする最も効率的な方法は何ですか?そこで、PDFファイルを圧縮するために使用されるBase85エンコーディングについて説明します。

ただし、この場合のBase64とBase85の違いは8文字です。

Base64文字列の末尾の「==」はアライメントに使用され、64バイトの値には常に存在するため、安全に削除できます(もちろん、文字列をデコードするには、これらの文字を追加し直す必要があります)。

于 2012-08-08T11:01:23.870 に答える
0

ユーザーが文字列を入力できるようにしたいと言っているので、ユーザーの観点からの使いやすさと string の長さの間には逆相関があります

文字列を入力するだけでも、Base64多くのエラーが発生する傾向があります。Base32文字列は入力がはるかに簡単ですが、それに応じて長さが増加します。

ユーザーがキーをコピーして貼り付けることができる場合、上記は意味がなく、文字列の長さをできるだけ短くする正当な理由はありません。

于 2012-08-08T10:00:20.820 に答える
0

明らかに、一定量のデータを一定数の文字に収めることしかできません。すでに base64 で制限をかなり超えているため、1 バイトあたり 6 ビットが得られます。

したがって、保存する必要があるデータの量を減らす必要があります。キーの長さを短くできますか? 96 ビット キーを使用できます (他のすべてのバイトを常にゼロのままにしておくことにより)。これには 16 個の base64 文字が必要であり、これははるかに優れています。

ブルートフォースに対するセキュリティはあまり必要ないようです。そのため、鍵のサイズをさらに小さくすることができます。

于 2012-08-08T10:21:29.677 に答える