- 締切済み
RSA
たびたびすいません。 C++でRSAをプログラムしています。 unsigned longは何bitになるのでしょうか。 また、配列は何個まで使えますか。 OSはwindowsです。 教えてください。
- maroniichann
- お礼率33% (53/157)
- C・C++・C#
- 回答数4
- ありがとう数1
- みんなの回答 (4)
- 専門家の回答
みんなの回答
long が何ビットかは OS だけではわかりませんが、 Windows (x86) のほとんどの C++ コンパイラは 32 ビットでしょう。 VC++ などでは、__int32 とか __int64 などの型を使うという手もあります。 配列が何個というのも奇妙な質問ですが、char と 巨大な構造体の配列を同じように個数だけで考える事はできませんから、トータルのバイトサイズを考慮するべきです。個数は、確保できるサイズの範囲でなら特に制限はありません。
- toysmith
- ベストアンサー率37% (570/1525)
> unsigned longは何bit C/C++言語では「1バイトのビット数が8ビットで無い処理系」をサポートしています。 結果、『ビット数』という概念を持ち込まないほうがよろしいかと… 「どうしてもビット数が知りたい」と言うのであれば ・sizeof(unsigned long) * CHAR_BITS ・ceil(log(ULONG_MAX) / log(2)) のどちらかで求められます。 > 配列は何個まで使えますか コンパイラ/リンカの仕様で決定されます。 Windowsでは「2の28乗バイトを超えるデータを持つプログラムは起動できない」という規定がありますが、単一の配列の大きさに関する規定はありません。 また、実行環境に依存する場合(仮想記憶領域の問題など)もありえるので「何個までなら安全」という基準は存在しません。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> unsigned longは何bitになるのでしょうか。 C++言語仕様ではその大きさを規定していません。 処理系依存です。 sizeof(unsigned long) の 値を確認してください。 > また、配列は何個まで使えますか。 環境依存です。決まっていません。 大きな配列を取るとアプリケーションが 吹っ飛ぶこともあります。 大きな領域は operator new によってヒープから 取得することをお勧めします。
- ichigo2002
- ベストアンサー率22% (216/942)
32ビットだと思います。
関連するQ&A
- RSAのCプログラム
何かC言語で書かれたRSAの一連の流れを示したものはありますか?Googleでプログラムを探しているのですがどうしてもみつかりません。プログラムとして、単純なものでよいです。ある平文に対して、はじめに2つの素数を見つけ(p,q)、鍵を生成し、暗号化をして、それを復号するというような一連の流れをC言語で見てみたいのでプログラムがありましたら教えてください。お願いします。
- ベストアンサー
- ネットワーク
- C言語のfwrite関数について
現在,バイナリのデータを処理するプログラムを作成しています。 おおまかに言えば,ファイルA(バイナリモードでオープン)からバイナリでデータを読み込んできて,そのデータを処理してファイルB(バイナリモードでオープン)に書出す,のようなプログラムです。 その処理したデータを入れるデータ型にunsigned long long int型(64bit)を使用しています。 その処理データをファイルBに書出す時に,fwrite関数を用いています(例参照)。 (例) for(i=0; i<N; i++){ fwrite(&c[i], sizeof(c[i]), 1, fp); } //配列cが「unsigned long long int型」です。 //配列cは最初に"0"で初期化しています。 //fpはファイルポインタです。 しかし,本システムでunsigned long long int型が実際に使用しているのは下位32bitです。 上の例で書出した場合,上位32bitの"0"も書出されていることになるのでしょうか。 書出されたファイルのサイズを見れば,64bit全て書出されているようですが,計算間違いで32bitを超えたところまで何かデータが入っている可能性もあります。 どなたはfwrite関数に詳しい方,ご回答をよろしくお願いします。
- ベストアンサー
- C・C++・C#
- long型のデータをバイト型の配列に代入する方法
long型のデータを配列を使って1byte毎に分けたい処理を作りたいのですが、 やりかたとしてはlong型のアドレスをポインタ変数に渡して、 ポインタ変数をバイト配列に代入する方法になりますでしょうか? 具体的なプログラムはこんな感じと考えてますが unsigned long LONG: unsigned char AAA[8], *pon, i: pon = &LONG for(i=0 i<8 i++) { AAA[i] = *pon + i; } C言語に詳しい方教えてください、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 128ビット変数の符合表現について
C言語で符号付128ビット変数を4つの32ビット変数(signed longまたはunsigned long)で表現したいと思っています。 この場合32ビット変数の符合付き/符合なしはどのように組み合わせるのが適切なのでしょうか。 一応3通りの方法を考えてはみました。 (1)が適切な気もするのですが違う気もします。 アドバイスをお願いします。 (1) 最上位32ビット変数をsigned longにして残りの3つの32ビット変数はunsigned longにする。 (2) 4つの32ビット変数を全てsigned longにする。 (3) 4つの32ビット変数を全てunsigned longにする。
- ベストアンサー
- C・C++・C#
- RSAによる暗号化について
よくRSAでの暗号化で鍵の長さが512ビットや1024ビットなどのものがありますが、これは公開鍵eと秘密鍵dと共通鍵nのどの鍵が512ビットなのでしょうか?自分の中では512ビットの鍵であれば全て(e,d,n)は512であると思っているのですが、dを計算する時(ユークリッド互除法を用いる)、どうしてもdはeやnの鍵の長さの2倍のビット長が必要な気がします。どうしてもわかりません。鍵のビット長について教えてください。お願いします。
- ベストアンサー
- ネットワーク
- 配列の確認
【環境】Windows XP、C++ サイズがXの配列があります。 配列は0~X-1の数値が1つずつ入れる目的で作っています。 その配列に値の重複が無く、全ての数値が入っているかを確認する処理なのですが、 自分が考えた方法で問題ないのかを確認してもらえないでしょうか? 処理としては、unsigned long long int型をフラグとして使って、(Xが64以上になる予定は今のところないので・・・、けど64に制限されるのが・・・。) 0が入っていたら1ビット目を立てて、1が入っていたら2ビット目を立てて、(以降最後まで続ける)にしようと思っています。 最終的に立っているフラグの数値が、2の(X+1)乗―1とイコールかを判定。 (←計算間違ってるかも) これで問題ないでしょうか? 他にいい案があれば教えてもらえないでしょうか? 以上、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- フリーのRSA暗号ソフト
フリーウエアのRSA暗号ソフトで、鍵の長さが 1024ビットから2048ビット程度まで扱える もので、 お勧めのものがありましたら紹介して下さい。 鍵作成の時間も分かりましたら教えて下さい。 最近、フリーメールの乗っ取りなどの話題もあり、 暗号化に興味があります。 よろしくお願いします。
- ベストアンサー
- ネットワーク