• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JCE使ったRC4暗号化のサンプルソースありませんか?)

JCE使ったRC4暗号化のサンプルソースと使い方

このQ&Aのポイント
  • J2SE5から、JCEでRC4がサポートされました。Blowfishなどを使ったサンプルソースは、検索で見つかるのですが、RC4で動作するサンプルソースはありませんか?
  • RC4の使い方がわからない場合、cipher.initでjava.security.InvalidKeyExceptionが発生することがあります。JCEとjavaDocだけではわかりづらいですよね。
  • この質問では、JCEを使ったRC4暗号化のサンプルソースと使い方についての情報が求められています。

質問者が選んだベストアンサー

  • ベストアンサー
  • bobviv
  • ベストアンサー率50% (13/26)
回答No.1

 デフォルトのポリシーファイルを置き換える必要があるようです。  参考URLで紹介されているように、Sunのダウンロードサイトから『Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 5.0』というのを持ってきて、<JAVA_HOME>/jre/lib/securityにある二つのpolicy.jarと置き換えると、こちらの環境では上のような例外は出力されなくなりました。  蛇足ですが、置き換える前にバックアップをお忘れなく。それからREADME.txtに書いてあるsecurityディレクトリのパスが間違っているようなのでご注意。

参考URL:
http://forum.java.sun.com/thread.jspa?threadID=656401&tstart=165
poppoi
質問者

お礼

ありがとうございました。 policy.jarを置き換えてうまくいきました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 暗号キーの保存

    現在下記のようにし、暗号化を行っています。 -------------------------以下ソース KeyGenerator kg = KeyGenerator.getInstance("AES"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); // 128ビットで暗号化 kg.init(128, random); Key key = kg.generateKey(); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); // バイト配列に変換 byte[] byteArray = cipher.doFinal(argStr.getBytes()); 暗号化について調べていると、暗号化(復号化)キーは乱数などで作ったほうが良いと書いてありました。 そこで質問なのですが、ログイン画面でパスワードを暗号化するために上記コーディングを行っているのですが、乱数でキーを作成した場合、各ユーザごとにキーが作成されるって認識であってますでしょうか? その場合、暗号キーはどこに保存しておくのが望ましいでしょうか? できる限りセキュアなアプリを作りたいと思っています。 (もちろん100%はないとは思っていますので) ※データベースは使えない環境を想定しています。 以上宜しくお願いします。 tomcat5.0 jdk.1.4.2 を使用

    • ベストアンサー
    • Java
  • DESを使用した暗号化/復号化処理について

    現在下記仕様でパラメータの暗号化複合化処理を作成していますが例外が発生して困っています。 方式:DES モード:CBC パディング:PKCS5Padding 秘密鍵:kagi1234 BASE64でエンコードしてString変換 【例外内容】 Exception in thread "main" java.lang.RuntimeException: java.security.InvalidKeyException: Parameters missing at enc.Main01.decrypt(Main01.java:114) 【ソースコード】 import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Encoder; public class Main01 { public static void main(String[] args) { try { String val1 = encrypt("10000", "key12345"); System.out.println(decrypt(val1, "key12345")); } catch (Exception e) { e.printStackTrace(); } } public static String encrypt(String text, String secretKey) throws Exception { SecretKeySpec sks = new SecretKeySpec(secretKey.getBytes(), "DES"); Cipher cp = Cipher.getInstance("DES/CBC/PKCS5Padding"); cp.init(Cipher.ENCRYPT_MODE, sks); return new BASE64Encoder().encodeBuffer(cp.doFinal(text.getBytes())); } public static String decrypt(String decValue, String secretKey) throws Exception { SecretKeySpec sks = new SecretKeySpec(secretKey.getBytes(), "DES"); byte[] decArr = new sun.misc.BASE64Decoder().decodeBuffer(decValue); Cipher cp = Cipher.getInstance("DES/CBC/PKCS5Padding"); cp.init(Cipher.DECRYPT_MODE, sks); return new String(cp.doFinal(decArr)); } } 対処方法がも解らず自力解決は困難です。 お手数ですが解決方法を御教授願えないでしょうか? よろしくお願いします。 環境(WidowsXP SP2, JDK1.5.0_07-b03)

    • ベストアンサー
    • Java
  • 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
  • iptablesの無効設定

    CentOS6.2を使用しています。 iptablesを無効にする為、以下の作業を行いましたが マシンを再起動すると動作しているようです。 何か足りない設定コマンドがありますでしょうか? #service iptables stop #chkconfig iptables off #/etc/rc.d/init.d/iptables stop 再起動後ステータスを確認すると以下の表示されてしまいます。 [root@マシン名 ~]# service iptables status テーブル: filter Chain INPUT (policy ACCEPT) num target prot opt source destination Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination 因みに 以下のようにsuコマンドで切り替えたり、rc.dの下の/init.d/iptables stopではなく、 #etc/init.d/iptables stopもしてみました。 [root@マシン名 ~]#su - [root@マシン名 ~]#/etc/init.d/iptables stop 宜しくお願い致します。

  • FTPSの通信でエラー発生

    皆様 現在、FTPでSSL通信(アクティブモード)を行っておりますが、以下のエラーが発生します。 No available certificate or key corresponds to the SSL cipher suites which are enabled. 特に、ファイアウォールの問題でもありません。パッシブモードでは問題なく動作します。 commons.net2.0のサンプルで動作検証を行っておりますが、アクティブモードだと別途、設定を施す必要があるのでしょうか。 環境 ・Java6使用 ・%JAVA_HOME%/jre/lib/security/cacertsをトラストストア(キーストア)として利用 ・commons.net2.0利用 よろしくお願いします。 orz

  • VB2005のソースの中にRubyを埋め込めますか

    VB2005 の初心者です。 Aシステム(Windows上でVB2005で開発)からBシステム(Linux上で動作)にアクセスする通信部分を開発しています。 BシステムはDBが2重化されており、ミドルウェアが主サーバと従サーバの同期を取っています。 このミドルウェアにアクセスするためのインターフェースとして、rubyおよびjavaが提供されています。 このインターフェースと外部アプリとは、TCPソケット通信で接続しますが、手順は下記のとおりとなります。 1.認証確認 2.DBOPEN 3.トランザクションスタート 4.DB検索・更新・追加・削除 5.トランザクションエンド 6.DBCLOSE ★★下記がサンプルになります★★ <バージョン番号> <ユーザID> <パスワード> <type>\n 1.2.1 ormaster jmarcpt stringe\n server = DB_Server.new("192.168.1.51",0,"ormaster","jmarcpt"); Exec: DBOPEN\n \n rc = server.dbops("DBOPEN"); Exec: DBSTART\n \n rc = server.dbops("DBSTART"); tbl_wksryact[HOSPID] = 'JPN0000000000001'; tbl_wksryact[PTID] = '0000000170'; rc = server.recordops("DBSELECT","tbl_wksryact","dbs",tbl_wksryact); server.recordops("DBFETCH","tbl_wksryact","dbs",tbl_wksryact); tbl_wksryact[SRYKA] = '10'; server.recordops("DBUPDATE","tbl_wksryact","dbs",tbl_wksryact); Exec: DBCOMMIT\n \n rc = server.dbops("DBCOMMIT"); Exec: DBDISCONECT\n \n End\n rc = server.dbops("DBDISCONNECT"); server.close; AシステムはVB2005で開発しているのですが、VB2005のソースにrubyを組み込むことはできるものなのでしょうか。 rubyに対する知識がないため、初歩的な質問となってしまいましたが、ヒントになるようなことでも良いのでご教授いただければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • Ruby
  • サンプルソースが欲しいのです

    XML、XML、XHTML、VRMLのソースコードのサンプルが欲しいのですが、何かいいのありませんでしょうか?ここに載ってるよってURLでもいいです。 ちなみにプログラミング目的で使うわけではありません。これらのマークアップ言語を知らない方に大雑把なイメージをわかってもらいたいのです。 どちらかというと、長いソースでなくて短いものが希望です。 全部でなくてもどれか一つでもいいので教えてください。 よろしくお願いいたします。

  • ソースの暗号化(?)

    PHPで作成したシステムをお客様のWebサーバへアップするのですが、PHPのソースは、テキストなので、自由に変更が出来てしまうので、 何か、ロック的なことはできないでしょうか? イメージ的には、AccessのMDB→MDEのような感じで。 ご存知の方いましたら、ご教授ください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • アプレットの動作テストができない

    Eclipseのメニュー→「実行」→「Javaアプレット」で、"HELLO"の文字を表示させるアプレットの動作テストしたんですが、エラーが出てしまいました。 エラー内容は以下の通りです。 -------------------------------------- この行に複数マーカーがあります。 - シリアライズ可能クラス Sample_01 は long 型の static final serialVersionUID フィールドを 宣言していません。 - ブレークポイント:Sample_01 ---------------------------------------- HTML上での動作テストは問題なくできるのですが、Eclipseでの動作テストは失敗します。なぜでしょうか? ソースはJava講座のHPの物なので、間違いないと思うのですが…。 //ソース import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.*; public class Sample_01 extends Applet{ //この部分に使用する変数を宣言// public void init(){ //ここで最初にやっておきたい処理を記述する// } public void paint(Graphics g){ g.drawString("HELLO!",200,200);//ここでアプレット画面に表示させる処理を記述する// } }

    • ベストアンサー
    • Java
  • ソースの暗号化について教えてほしい

    ホームページのソースを見ると、普通は小文字のアルファベットがズラズラと並んでいるのが普通ですが、下記のような表示がされているサイトがあるのですが、どのようにすれば、同じように表示されるのかが知りたいです。 <HTML> <HEAD> <TITLE>・カタカナモジ・モ・キ・蝪オ・ケ。ハ イツリ、ゥ・ニ・ハ・ネ。ヲオ゜イフ。ヲトョイキ、フジ・酣イ 。ア</TITLE> よろしくお願い致します。