- ベストアンサー
あるはずのライブラリがよみこめない??
winxpにJava2 1.4のSDKをインストールして、 暗号化のサンプルソースをてにいれて、 コンパイルをして、実行すると、 Exception in thread "main" java.lang.NoClassDefFoundError:javax/crypto/spec/SecretKeySpec というエラーが発生します。 で、インストールしたjavaのディレクトリの中をみると、jce.jarは存在し、 そのなかに、SecretKeySpec.classはありました。 環境設定でなにか足りない等問題があるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Java 1.4の標準ライブラリに入っているjavax.crypto.CipherのメソッドがNoSuchMethodErrorを投げるなんてありえないはずなんですが……。 javax.crypto.spec.SecretKeySpecが見つからないといわれるのも本来ありえない話です。 (クラスパス云々以前に)実行環境そのものに問題があるように思われます。 実行環境は本当に正しくインストールされていますか? コンパイル環境と実行環境のバージョンは同じですか? (複数バージョンのJava環境が一つのコンピュータに混在していませんか) 確認してください。
その他の回答 (2)
- hidebu-
- ベストアンサー率53% (45/84)
タグはどのように記述されていますか?
お礼
ご回答ありがとうございます。 タグってHTMLのほうでしょうか? 下のソースはコマンドライン実行ですが・・・
- midomaru
- ベストアンサー率14% (13/90)
クラスパスは設定されているでしょうか? 環境変数で設定されるか、DOSの画面で set classpath=classファイルの入ってるディレクトリを指定してあげればおkだと思いますよ^^ cdもきちんと設定して下さいね^^
お礼
ご回答ありがとうございます。 で、早速やってみたところ、 そのエラーは消えました!ありがとうございます。 で、問題は、2つ有り、 アプレットでつかおうかとおもってるんですが、 クラスパスって設定できるものなんでしょうか? というのと、 次のエラーがでています。 Exception in thread "main" java.lang.NoSuchMethodError at javax.crypto.SunJCE_b.<clinit>(DashoA6275) at javax.crypto.Cipher.a(DashoA6275) at javax.crypto.Cipher.getInstance(DashoA6275) at Test.enCrypto(Test.java:25) at Test.main(Test.java:49) といった感じです・・・
補足
新たに出るようになったエラーのソースは次のような感じです。 import java.io.*; import java.security.*; import javax.crypto.*; import javax.crypto.spec.*; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class Test { /* 暗号化の秘密鍵 */ final private static byte byteKey[] = { (byte) 0xA1, (byte) 0x94, (byte) 0xD3, (byte) 0x04, (byte) 0xF5, (byte) 0xFE, (byte) 0x2F, (byte) 0x58 }; /* 暗号化 */ public static String enCrypto(String str) throws Exception { SecretKeySpec key = new SecretKeySpec(byteKey, "DES"); Cipher cip = Cipher.getInstance("DES"); cip.init(Cipher.ENCRYPT_MODE, key); byte secret[] = str.getBytes(); secret = cip.doFinal(secret); return new String(secret, "ISO-8859-1"); } /* 複合化 */ public static String deCrypto(String str) throws Exception { SecretKeySpec key = new SecretKeySpec(byteKey, "DES"); Cipher cip = Cipher.getInstance("DES"); cip.init(Cipher.DECRYPT_MODE, key); byte secret[] = str.getBytes("ISO-8859-1"); secret = cip.doFinal(secret); return new String(secret); } public static void main(String[] args) throws Exception { String x = "テストF"; System.out.println("x = " + x); String y = enCrypto(x); System.out.println("y = " + y); String z = deCrypto(y); System.out.println("z = " + z); } }
お礼
ご回答ありがとうございます。 > 実行環境は本当に正しくインストールされていますか? それができてない場合ってのがどう確認すればいいかを質問したつもりだったんですが・・・説明へたですみません。 確認したところ、jreがいろいろはいってて、一回削除して、ひとつにし、別のサンプル(criptoM)を実行させてみたところ、うまいこといきました。 ありがとうございました・・・
補足
(お礼の続き) JREをひとつにして、 このソースをもう一回やってみたところ、 うごきました。 ありがとうございました。