2017-07-10 10 views
-2

入力整数値を暗号化するタスクを与えました。この整数は最大4文字ですが、英数字の文字列に暗号化する必要があります。これとは別に、私が同じ値(例えば10)から生成した結果は同じでなければならない。最も難しい部分は、暗号化された文字列の最大値は、クエリ文字列に入れなければならないため、最大15文字までです。それは難しい仕事でした。私はGoogleに尋ねようとしましたが、私には解決策が見つかりませんでした。すべての長さが長すぎて、私が必要とする要件を満たしていません。どの暗号化プロフェッショナルでもこれを手伝うことができますか?整数の短い暗号化

+1

いくつかの入力と出力のサンプルを投稿してください(投稿にはコメントではありません)。 _「最大4整数」は多くの方法で読み取ることができます。_また、長さはなぜあなたにとって重要なのですか? – mjwills

+0

それは単なる純粋な整数であり、入力最大4整数、出力最大英数字15文字 –

+1

あなたはその方法を望んでいる理由をリーダーに尋ねることができますか?また、「6整数」が何を意味するのか分かりません。 – mjwills

答えて

-2
public static string GetUniquePasswordSalt(string password) 
{ 
    string uniqueSaltValue = ""; 
    Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(password, 16); 
    uniqueSaltValue = Convert.ToBase64String(rfc2898.Salt); 
    return uniqueSaltValue; 
} 

アウトがRfc2898DeriveBytes

https://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes(v=vs.110).aspx

+0

こんにちは私はそれを解読する方法を知っているかもしれませんか? –

+0

@RyanShine暗号化することができない私の要件に従って使用するコードは、私はDBにパスワードを保存しません。そのために、私はハッシュアルゴリズムを塩で使用し、次にそれを連結して、それを解読します。私はあなたの要件を知らない。 しかし、これはあなたを助ける: https://www.codeproject.com/Articles/38804/Encryption-and-Decryption-on-the-NET-Framework – Nik

+0

二人はかなりの票をダウン与える彼らのビジネスを気にすることをいけないのはなぜ私はちょうど助けようとしていました。 – Nik

0

を試してみて、 "01"

のために、 "HB6yY + f5fyOaFFyrKEcPYw ==" になります私はあなたが入力する4桁の番号を機能を望んでいることを前提としています。 [0000 .. 9999]、15文字の英数字出力を生成する。

この機能を元に戻すことはできません。可逆性が必要ない場合は、一方向ハッシュ関数が必要な処理を行います。 15桁の16進文字は60ビット、または15桁のBase32文字は75ビットです。より大きいサイズのハッシュ関数を使用し、切り捨てて16進数またはBase32に変換します。 Base32は、16進数よりも広い範囲の出力文字を提供します。

可逆性については、Format Preserving Encryptionが必要です。出力サイズは60または75の有効ビットに制限されています。 60ビットの場合、64ビットのブロックサイズを持つため、DESをベース暗号として使用します。 75ビットはより厄介です。 128ビットのAESはブロックサイズが大きすぎますので、シンプルな76ビットFeistel暗号を書く必要があります。それはあなたに良いあいまいさを与えますが、中規模のセキュリティだけを与えます。あなたはこの機能がどれくらい安全である必要があるかは言いません。

+0

質問:「**最大**は暗号化された文字列の15の長さを持つことができます」 – zaph

+1

わかりにくいですが、可逆でなければなりません –

1

前提:「整数最大6長さ」とは、6文字の000000-999999を意味します。

8バイトのブロックサイズを持ち、Base64でエンコードするアルゴリズムで暗号化すると、12文字の出力が生成されます。

データの6文字に2バイトを加えて8バイトにすると、同じ値の暗号化で最大2^16または65536の異なる結果が発生します。 ECBモードで暗号化し、Base64でエンコードします。それは12文字の出力を生成します。

入力を復元するには、Base64をデータに暗号化して復号化し、2つのランダムなバイトを削除します。

可能な暗号化アルゴリズムには、Blowfish,XTEA、DESなどがあります。

注:6桁の数値は、3バイトのバイナリ表現に変換してから、同じ6桁の入力に対して2^40の異なる出力を生成する5つのランダムバイトを可能にすることができます。

+0

私は多分自分の質問を編集しました。方法私は使用する必要があります –

関連する問題