• 締切済み

openSSLのAES暗号化アルゴリズム関数仕様 (C言語開発)

openSSLのAES暗号化アルゴリズムを使用して、暗号化と復号化の処理 をC言語で作成したいのですが、関数の仕様書を見つけることができません。 尚、openSSLの公式Pageにも載ってませんでした><; 関数仕様書を入手できるHP、或いは書籍(有料でも良いです)などございましたら、 ご教授の程、お願い致します。

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

opensslをSSLとして使うのでなく、AES暗号化/復号化サブルーチンを直接呼び出して使いたいということでしょうか。 この辺はSSL利用者向けのインタフェースじゃないので、opensslに新たなアルゴリズムを追加する開発者向けのインタフェース仕様書などがあれば良いのですが、残念ながらそういう仕様書はないんじゃないかと思います。 おそらくソースコードの適当なヘッダファイルを読むのが早いかと。 # 以前にDSAを調べてソースを読んだことがあるけど、アルゴリズムを追加しやすいようにか # 枠組みとアルゴリズムが分離されているので実際の計算部分を探すのが難しかった

darkness22
質問者

お礼

ん~やはりないですか...。 ソースコード見て、直叩きって感じでやってみます。 ご回答ありがとうございました。

関連するQ&A

  • OPENSSLをC言語で

    OPENSSLを使用して暗号化と復号化の処理をC言語(VC++)で 作りたいのですが、C言語からの関数の仕様書を見つけることが できません。一覧表は見つけたのですがこれでは機能がわからなくて 困っています。 また、例題としてコマンドラインからの例は、入手できたのですが これがCの関数になるとどのようになるのか解かりません。 関数仕様書を入手できるHPを教えてください。 (英語のサイトも探しましたが、挫折しました) こんな、馬鹿な質問で申し訳ありません。

  • 組み込みC言語 AES 暗号・復号化の利用

    組み込みマイコン関係の開発に携わっているものです。 この度、AES128の暗号・復号化を使用する開発案件に 携わることになり、AESの暗号・復号化について勉強中です。 まだ、マイコンでの暗号化・復号化処理という 開発経験がないため、皆様にご教示頂きたく 質問させて頂きます。 マイコンでAES128等の暗号・復号化処理を実装する場合。 マイコンそのものがハードウェアとして暗号・復号化の機能を 持っているものがありますが、通常はこちらで対応するのが 正当な方法、という認識で合っているのでしょうか? また、仮にファーム側の対応を要求された場合は、 マイコンメーカーが出している有料のライブラリ。 または、何かその手では有名な参考となるフリーの ソースコードというものが有るのでしょうか? 恐れ入りますが、ご教示の程宜しくお願い致します。

  • AES暗号にて、AES_set_encrypt_keyで設定されるAES_KEYについて

    VC++2008にてopensslを用いて、AES暗号/復号の機能を作成しています。 AES_set_encrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_ENCRYPT)にて暗号、 AES_set_decrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_DECRYPT)にて復号するコーディングをしました。 (http://d.hatena.ne.jp/hnko/20090302/1235977892のenc_aes128_cbc_test()を参考にしましたので、 一連の流れは、こことほぼ同じです) デバッグしてみると、一見、暗復号が問題なく出来ていたので、 AES_set_encrypt_key関数の第一引数のkey配列の値と、 ivec配列の値を変えて、デバッグしてみたところ、 key配列を変更すると、暗号化後の文字列も変更されますが、 ivec配列を変更しても、暗号後の文字列に変化が有りませんでした。 調べてみたところ、AES_set_encrypt_keyにて返される AES_KEYのroundsの値が常に同じであることが原因と思われますが、 roundsの値が常に一定だと、暗号解読が比較的容易に 出来てしまうと思うのですが、上記で挙げたサイトでの コーディングの他に、何か別にコーディングを足さなければならないのでしょうか? よろしくお願いします。

  • 暗号化・復号化のアルゴリズムにはどんなものがありますか?

    Cでプログラミングを勉強しており、20文字ほどの文字列を暗号化・復号化するプログラムを考えていますが、ネットを検索しても暗号化アルゴリズムでなかなかいいものが見つかりません。 私のリクエストとしては ・暗号化対象は半角英数字、半角記号のみ。 ・単に文字コードを1つずつずらしたような簡単な暗号ではなく、複雑なアルゴリズムを使用したい。 ・アルゴリズムは複雑でもプログラムは簡潔にできるものがいい。(長くても数百行程度)。 ・アルゴリズム自体の仕様が公開されている。 ・アルゴリズムは数学式で表せるものがいい。 ・スーパーコンピュータを使わなければ解けないほど時間がかかる暗号化アルゴリズムでなくてもいい。 ・暗号化のライブラリファイルは使わず、自前で全部コードを書きたい。 ・公開鍵や秘密鍵を使わなくてもいい。 上記の条件を満たす暗号化アルゴリズムでいいものがありましたら、教えてください。 以上、よろしくお願いします。

  • JavaからVBScriptへのAES暗号化によるデータ渡し

    javaで作られたサイトからVBScriptで作られたサイトへサイレントログインするシステムを構築しています。 その際にログインIDをAES(キー長128bit、ECBモード)で暗号化し渡そうと考えています。 javaではCipherクラスで暗号化し、aspではCAPICOMで復号化しようとしているのですが、うまくいきません。 そもそも同じ平文と鍵で暗号化しても同じ暗号文になりません。(javaはbase64に変換しています。CAPICOMが間違っているような気はしているのですが、参考になるものが少なくて困っています。) CAPICOMはhttp://apis.jpn.ph/fswiki/wiki.cgi?page=ScrapCode%2FVBS%2FConvertのサンプル通りにやっています。 CAPICOMでもjavaでも同じ暗号化方式ならば同じ結果が返ってくるべきだと思うのですが、認識違いますか? どうすれば、同じ暗号文が取得できるのでしょうか? また、java-VBScript間のAES暗号でのデータ渡しについて、 違う方式で可能ならば教えてください。 よろしくお願いします。

  • C言語未経験者からの質問

    ゲームプログラムの専門学校に入ろうと思っているのですが C言語がまったくの未経験でして困っています。 そこで質問なのですが (1)C言語の入門書レベルの書籍(できれば特定の処理系に依存していないもの) (2)アルゴリズム関係のわかりやすい書籍 の2つを教えてください。 どうかよろしくお願いします。

  • Java(AES)多重の暗号化・復号化、安全?

    メンタル・ポーカー・アルゴリズム↓をJavaで実装したくて http://en.wikipedia.org/wiki/Mental_poker まず、暗号化について調べました。 AESという暗号化の方法を使ってみたのですが、 これなら、多重に暗号化したとして、順番に関わらず、 復号化できるようなので、メンタル・ポーカー・アルゴリズムが実装できると思いました。 しかしながら、私はこのAESという暗号化の方法について、詳しく知りません。 この暗号化方法は、安全なのでしょうか。たとえば、カギがなくとも、暗号前のデータの見当がつく かのようなことが、スーパーコンピュータの手にかかれば一時間もあれば分かってしまう、 というようなことはないでしょうか。 下記は、ランダムな順番で暗号化・復号化してみたコードです↓ 参考になればと思い乗せてみます static void shuffle(int[] array) { for (int i = 1; i < array.length; i++) { int n = random.nextInt(i + 1); int t = array[i]; array[i] = array[n]; array[n] = t; } } public void testAES() throws Exception { String alg = "AES"; byte[] orgData = "abcdefghhijklmno".getBytes(); KeyGenerator keygen = KeyGenerator.getInstance(alg); int keyCount = 16; Key[] keys = new Key[keyCount]; int[] encryptOrder = new int[keyCount]; int[] decryptOrder = new int[keyCount]; for (int i = 0; i < keyCount; i++) { keys[i] = keygen.generateKey(); encryptOrder[i] = i; decryptOrder[i] = i; } shuffle(encryptOrder); shuffle(decryptOrder); byte[][] ivs = new byte[keyCount][]; Cipher cipher = Cipher.getInstance(alg + "/OFB/NoPadding"); byte[] data = orgData.clone(); for (int i = 0; i < keyCount; i++) { int idx = encryptOrder[i]; cipher.init(Cipher.ENCRYPT_MODE, keys[idx]); ivs[idx] = cipher.getIV(); data = cipher.doFinal(data.clone()); } for (int i = 0; i < keyCount; i++) { int idx = decryptOrder[i]; cipher.init(Cipher.DECRYPT_MODE, keys[idx], new IvParameterSpec(ivs[idx])); data = cipher.doFinal(data); } assertTrue(new String(data), Arrays.equals(orgData, data)); }

    • ベストアンサー
    • Java
  • 「Crypto API」について

    初めて質問させて頂きます。 質問したいことはCrypto APIのCSP(CryptoGraphy Service Provider、環境XPSP3)と次世代暗号のCNG(Cryptography Next Genaration、環境はWin7)の互換性についてです。 (1)CryptoAPIのCryptCreateHash関数でメッセージをSHA_256にし、AES_256のセッション鍵を作成した暗号文をCNGで復号することはできますか? (2)上記の逆(CNGでSHA_256→AES_256で暗号化)した場合、CSPで復号できますか? 出来る場合は必要な関数を、できなければ他の解決方法を教えて頂きたいです。 よろしくお願いします。

  • opensslを使ったAES暗号化について

    opensslを使ったAES暗号化について教えて下さい。 AESは「鍵とブロックの長さはそれぞれ128ビット、192ビット、256ビットの中から指定できる。」とありました。 opensslのAESを使って鍵長とブロック長をともに256ビットで暗号化したい場合どのようにすれば宜しいでしょうか。 openssl enc -e -aes256 -in original.txt -out crypted.txt 上記コマンドを打った場合 -aes256 というのがブロック長(256ビット)の指定と思っていますがあってますでしょうか? 残りの鍵長を256ビットにするというのは どのように指定すれば宜しいでしょうか。 何卒 宜しくお願い致します。

  • PHP で暗号化して何かを送信することってあるのでしょうか?

    こんにちは、趣味で PHP を触っています。 とても初歩的な質問になってしまうと思いますが、よろしくお願いします。 PHP では crypt 関数で暗号化することができるらしいのですが、実際にこれを使わなければいけない場合とはどのような時なのでしょうか? http://jp2.php.net/manual/ja/function.crypt.php PHP で処理したことを MySQL などのデータベースに書き込む場合、主にサーバー内での処理なので外部から見られることなんてないと思っていましたが、見ることは可能なのでしょうか? それともう一つ質問がありまして、マニュアルには「復号するための関数はありません。 crypt() が使用しているのは単方向アルゴリズムだからです。」とありますが、それだと暗号化すると二度とその情報が何かわからなくなるのではないでしょうか? 何か複合化する方法があるのですか? よろしくお願いします。

    • ベストアンサー
    • PHP