質問
私が使っているの NTL図書館 実施ElGamal暗号化/復号アルゴリズムです。そうだったんではよいが、アルゴリズムのメッセージの整数型に変換で暗号化することができます。
その場合を入力し番号のような1234べての動作がどのように行ってきに変換するにはC++の文字列std::string)をZZれるZZ数値を文字列?
LE:
ZZこのクラスを表します。
Ex:18287348238476283658234881728316274273671623781254124517353
のではないでしょうかを探している"こんにちは世界"例えば、実行しまcharによるcharのasciiコードの文字を含んだ数値を取得します:"72 101 108 108 111 32 87 111 114 108 100"
それかに変換する必要があるが、この数に戻る文字列"こんにちはの世界"
もあります。
解決
ここでそれを行うための簡単な方法があります:
std::string str("1234567890");
NTL::ZZ number(NTL::INIT_VAL, str.c_str());
今のことに注意します:
std::cout << str << std::endl; // prints 1234567890
std::cout << number << std::endl; // prints 1234567890
他のヒント
ここではNTLの作者のWebサイトからの答えは次のとおりです。
は記載されている変換に加えて、汎用的な変換があります 任意のタイプTへの C-文字列の(すなわち、CONSTのchar *)から 型Tの入力演算子を使用して、テンプレートを使用して実装>> したがって、たとえば、あなたが書くことができます。
ZZ x = conv<ZZ>("99999999999999999999999");
ソース: http://www.shoup.net/ntl/doc/conversions .TXTする
私はそれを試みたが、それは完全に働いています。
では、これまで最も簡単な解決策は、あなたがchar
番号にunsigned int
sにunsigned int
s、およびZZ
sを変換できることを実現することです。そして、ベース-256数として文字列を扱います。例えば、 "ABC" 256 * "AB" + "C"、または65536 * "" + 256 * "B" + "C"、またはあろう((ZZ(unsigned('a')*256) + ZZ(unsigned('b'))*256) + ZZ(unsigned('c'))
、