可変長の文字列から固定長のバイトシーケンスを作成したい。これをアーカイブする最良の方法は何ですか。すべてのバイトはできるだけ異なる必要があります。
コードは私自身の研究に使用されており、生産的なものではありません。
これは、バイトを生成するための私の最初のアプローチです。
static byte[] GenerateBytes(string password, Int32 strength)
{
Byte[] result = new byte[strength];
Byte[] pwBytes = Encoding.ASCII.GetBytes(password);
Int32 prime = GetLowerPrime(pwBytes.Length);
// Offset count to avoid values
Int32 count = prime;
Int32 sum = 0;
for (int i = 0; i < result.Length; i++) {
sum += (result[i] = pwBytes[(count++ % pwBytes.Length)]);
}
count += prime;
Int32 pcount = prime;
for (int i = 0; i < result.Length * 7; i++) {
result[(i % result.Length)] ^= (Byte)(pwBytes[(count++ % pwBytes.Length)] ^ ((pcount += pwBytes[(count % pwBytes.Length)]) % 255));
}
return result;
}
そして、256 / 128 / 64 生成されたバイトでいくつかのサンプルを生成し、一意のバイトをカウントしました。
Password "Short": 170 103 60
Password "LongerX": 173 101 55
Password "Really Long": 169 100 57
Password "Unbelivable Safe!0§$": 162 101 56
Password "MCV": 119 113 61
Password "AAA": 50 51 50
Password "BBB": 67 67 52
Password "AAAAAA": 48 48 48
プライムセレクターを少し変更してみました。これにより、短いキーでの生成が改善されますが、長いキーには部分的に影響があります。また、バイトの統計をいくつか追跡しました。生成され、各バイト値は 9 ~ 30 回使用されます。