0

私は、呼び出されたときに BigInteger 値を取得し、encrypetd ​​または復号化された BigInteger 値を返す関数を暗号化および復号化する RSA プロジェクトを行っています。ユーザーから(テキストボックスから)暗号化または復号化する番号を取得し、適切な関数に送信します。これは、ユーザーがテキストボックスに数値を入力したときにうまく機能しますが、ユーザーが指定した任意の文字列 (数字、文字、特殊文字) に対して機能するようにしようとしているため、入力文字列を一意の BigInteger 値に変換する必要があります。適切に復号化および暗号化できます。UTF8エンコーディングとAsciiエンコーディングを使用しようとしました(文字列をバイト配列に変換し、バイト配列をbigintegerに変換し、bigintegerを適切な関数に送信します)。私ができなかったので、両方ともうまくいきませんでした」上記の方法を使用して暗号化した後にメッセージを復号化し、bigniteger 値を文字列に変換した後、多くの奇妙な文字 (「?」と四角形) が表示されました。では、どうすれば機能させることができ、文字列を一意の BigInteger に変換する最良の方法は何ですか?

どうもありがとう

ps私はC#でプロジェクトを行います

4

2 に答える 2

3

このようなものを作ろうとしていますか?

string input = "hello this is secret message!";

BigInteger bi = new BigInteger(Encoding.UTF8.GetBytes(input));

//Encrypt :)
var ebi = bi * 5; 
var encString = Convert.ToBase64String(ebi.ToByteArray());

//Decrypt :)
var ebi2 = new BigInteger(Convert.FromBase64String(encString));         
var dbi = ebi2 / 5; 

string output = Encoding.UTF8.GetString(dbi.ToByteArray());
于 2012-10-27T11:24:11.610 に答える
0

BigIntegerデータ型を使用して大きな数を格納できます。静的なTryParseメソッドは、文字列を任意の大きな数に変換します。

Using System.Numerics
BigInteger number;
BigInteger.TryParse("4565653454454544423", out number);
于 2012-10-27T10:53:29.243 に答える