私は AS400-Java プログラミングの初心者です。メッセージ認証コード (MAC) の実装をテストする最初のプログラムを作成しようとしています。HMACSHA1 ハッシュ関数を使用しようとしています。私の (Java 1.4) プログラムは、開発ボックス (V5R4) では正常に動作しますが、QA ボックス (V5R3) ではひどく失敗します。私のプログラムは以下の通りです:
================================================== ===
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.security.Provider;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.SecretKey;
public class Test01
{
private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";
public static void main (String [] arguments)
{
byte[] key = { 1,2,3,4,5,6,7,8};
SecretKeySpec SHA1key = new SecretKeySpec(key, "HmacSHA1");
Mac hmac;
String strFinalRslt = "";
try {
hmac = Mac.getInstance("HmacSHA1");
hmac.init(SHA1key);
byte[] result = hmac.doFinal();
strFinalRslt = toHexString(result);
}catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(StackOverflowError e){
e.printStackTrace();
}
System.out.println(strFinalRslt);
System.out.println("All done!!!");
}
public static byte[] fromHexString ( String s )
{
int stringLength = s.length();
if ( (stringLength & 0x1) != 0 )
{
throw new IllegalArgumentException ( "fromHexString requires an even number of hex characters" );
}
byte[] b = new byte[stringLength / 2];
for ( int i=0,j=0; i>> 4] );
//look up low nibble char
sb.append( hexChar [b[i] & 0x0f] );
}
return sb.toString();
}
static char[] hexChar = {
'0' , '1' , '2' , '3' ,
'4' , '5' , '6' , '7' ,
'8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f'};
}
このプログラムは正常にコンパイルされ、win-xp クライアントと開発ボックスで正しい応答が得られます。ただし、QA ボックスで次のエラーが表示されて失敗します。
java.lang.StackOverflowError java.lang.Throwable で (Throwable.java:180) java.lang.Error で (Error.java:37) java.lang.StackOverflowError で。(StackOverflowError.java:24) java.io.Os400FileSystem.list(ネイティブメソッド) java.io.File.list(File.java:922) javax.crypto.be (提供元不明) at javax.crypto.ba (提供元不明) javax.crypto.bc (提供元不明) at javax.crypto.b£0.run (不明なソース) at javax.crypto.b.(不明なソース) javax.crypto.Mac.getInstance で (不明なソース)
java.security ファイルと、jce ファイルに対応するエントリがすべて問題ないことを確認しました。DMPJVM コマンドを実行すると、次の応答が返されます。
木 6 月 3 日 12:25:34 E Java 仮想マシン情報 016822/QPGMR/11111 ................................................................... ................................... . クラスパス . ................................................................... ................................... java.version=1.4 sun.boot.class.path=/QIBM/ProdData/OS400/Java400/jdk/lib/jdkptf14.zip:/QIBM /ProdData/OS400/Java400/ext/ibmjssefw.jar:/QIBM/ProdData/CAP/ibmjsseprovide r.jar:/QIBM/ProdData/OS400/Java400/ext/ibmjsseprovider2.jar:/QIBM/ProdData/ OS400/Java400/ext/ibmpkcs11impl.jar:/QIBM/ProdData/CAP/ibmjssefips.jar:/QIB M/ProdData/OS400/Java400/jdk/lib/IBMiSeriesJSSE.jar:/QIBM/ProdData/OS400/Ja va400/jdk/lib/jce.jar:/QIBM/ProdData/OS400/Java400/jdk/lib/jaas.jar:/QIBM/P rodData/OS400/Java400/jdk/lib/ibmcertpathfw.jar:/QIBM/ProdData/OS400/Java40 0/jdk/lib/ibmcertpathprovider.jar:/QIBM/ProdData/OS400/Java400/ext/ibmpkcs. jar:/QIBM/ProdData/OS400/Java400/jdk/lib/ibmjgssfw.jar:/QIBM/ProdData/OS400 /Java400/jdk/lib/ibmjgssprovider.jar:/QIBM/ProdData/OS400/Java400/jdk/lib/s ecurity.jar:/QIBM/ProdData/OS400/Java400/jdk/lib/charsets.jar:/QIBM/ProdDat a/OS400/Java400/jdk/lib/resources.jar:/QIBM/ProdData/OS400/Java400/jdk/lib/ rt.jar:/QIBM/ProdData/OS400/Java400/jdk/lib/sunrsasign.jar:/QIBM/ProdData/O S400/Java400/ext/IBMmisc.jar:/QIBM/ProdData/Java400/ java.class.path=/myhome/lib/commons-codec-1.3.jar:/myhome/lib/commons-httpc lient-3.1.jar:/myhome/lib/commons-logging-1.1.jar:/myhome/lib/log4j-1.2.15.jar:/myhome/lib/log4j-core.jar ; java.ext.dirs=/QIBM/ProdData/OS400/Java400/jdk/lib/ext:/QIBM/UserData/Java4 00/ext:/QIBM/ProdData/Java400/jdk14/lib/ext java.library.path=/QSYS.LIB/ROBOTLIB.LIB:/QSYS.LIB/QTEMP.LIB:/QSYS.LIB/ODIP GM.LIB:/QSYS.LIB/QGPL.LIB ................................................................... ................................... . ガベージ コレクション。 ................................................................... ................................... ガベージ コレクターのパラメーター 初期サイズ: 16384 K 最大サイズ: 240000000 K 現在の値 ヒープサイズ: 437952 K ガベージ コレクション: 58 付加価値 JIT ヒープ サイズ: 53824 K JVM ヒープ サイズ: 55752 K 最後の GC サイクル時間: 1333 ミリ秒 ................................................................... ................................... . スレッド情報 . ................................................................... ................................... 処理された 4 つのスレッドのうち 4 つのスレッドの情報 スレッド: 00000004 スレッド-0 TDE: B00380000BAA0000 スレッドの優先度: 5 スレッドの状態: 実行中 スレッドグループ: メイン 実行可能: java/lang/Thread スタック: java/io/Os400FileSystem.list(Ljava/io/File;)[Ljava/lang/String;+0 (Os400FileSystem.java:0)] java/io/File.list()[Ljava/lang/String;+19 (File.java:922) javax/crypto/be()[B+127 (:0)] javax/crypto/ba(Ljava/security/cert/X509Certificate;)V+7 (:0) javax/crypto/b.access$500(Ljava/security/cert/X509Certificate;)V+1 (:0) javax/crypto/b$0.run()Ljava/lang/Object;+98 (:0) javax/crypto/b.()V+507 (:0) javax/crypto/Mac.getInstance(Ljava/lang/String;)Ljavax/crypto/Mac;+10 (:0) ロック: なし スレッド: 00000007 jitcompilethread TDE: B00380000BD58000 スレッドの優先度: 5 スレッドの状態: Java 待機 スレッドグループ: システム 実行可能: java/lang/Thread スタック: なし ロック: なし スレッド: 00000005 参照ハンドラ TDE: B00380000BAAC000 スレッドの優先度: 10 スレッドの状態: 待機中 待機オブジェクト: java/lang/ref/Reference$Lock スレッドグループ: システム 実行可能: java/lang/ref/Reference$ReferenceHandler スタック: java/lang/Object.wait()V+1 (Object.java:452) java/lang/ref/Reference$ReferenceHandler.run()V+47 (Reference.java:169) ロック: なし スレッド: 00000006 ファイナライザー TDE: B00380000BAB3000 スレッドの優先度: 8 スレッドの状態: 待機中 待機オブジェクト: java/lang/ref/ReferenceQueue$Lock スレッドグループ: システム 実行可能: java/lang/ref/Finalizer$FinalizerThread スタック: java/lang/ref/ReferenceQueue.remove(J)Ljava/lang/ref/Reference;+43 (ReferenceQueue.java:111) java/lang/ref/ReferenceQueue.remove()Ljava/lang/ref/Reference;+1 (ReferenceQueue.java:127) java/lang/ref/Finalizer$FinalizerThread.run()V+3 (Finalizer.java:171) ロック: なし ................................................................... ................................... . クラスローダー情報。 ................................................................... ................................... 0 デフォルトのクラスローダー 1 sun/reflect/DelegatingClassLoader 2 sun/misc/Launcher$ExtClassLoader ................................................................... ................................... . GC ヒープ情報。 ................................................................... ................................... ローダー オブジェクト クラス名 ------ ---------- ---------- 0 1493 [C 0 2122181 Java/言語/文字列 0 47 [Ljava/util/Hashtable$ エントリ; 0 68 [Ljava/言語/オブジェクト; 0 1016 Java/言語/クラス 0 31 ジャバ/ユーティリティ/ハッシュマップ 0 37 ジャバ/ユーティリティ/ハッシュテーブル 0 2 java/lang/ThreadGroup 0 2 java/lang/RuntimePermission 0 2 java/lang/ref/ReferenceQueue$Null 0 5 java/lang/ref/ReferenceQueue 0 50 ジャバ/ユーティリティ/ベクター 0 4 Java/ユーティリティ/スタック 0 3 sun/misc/SoftCache 0 1 [Ljava/言語/ThreadGroup; 0 5 [Ljava/io/ObjectStreamField; 0 1 太陽/反射/ReflectionFactory 0 7 java/lang/ref/ReferenceQueue$ロック 0 10 Java/言語/オブジェクト 0 1 java/lang/String$CaseInsensitiveComparator 0 1 java/util/Hashtable$EmptyEnumerator 0 1 java/util/Hashtable$EmptyIterator 0 33 [Ljava/util/HashMap$ エントリ; 0 19210 [日] 0 1 sun/nio/cs/StandardCharsets 0 5 ジャバ/ユーティリティ/ツリーマップ 0 1075 java/util/TreeMap$ エントリ 0 469 [Ljava/言語/文字列; 0 1 java/lang/StringBuffer 0 2 java/io/FileInputStream 0 2 java/io/ファイル出力ストリーム 0 2 java/io/BufferedOutputStream 0 1 java/lang/reflect/ReflectPermission 0 1 [[Ljava/lang/ref/SoftReference; 0 2 [Ljava/lang/ref/SoftReference; 0 2 sun/nio/cs/Surrogate$Parser 0 3 太陽/その他/信号 0 1 [Ljava/io/ファイル; 0 6 ジャバ/io/ファイル 0 1 Java/ユーティリティ/ビットセット 0 17 太陽/反射/NativeConstructorAccessorImpl 0 2 java/net/URLClassLoader$ClassFinder 0 12 java/util/ArrayList 0 32 java/io/RandomAccessFile 0 16 Java/言語/スレッド 0 1 java/lang/ref/Reference$ReferenceHandler 0 1 java/lang/ref/Finalizer$FinalizerThread 0 266 [B 0 2 java/util/プロパティ 0 71 java/lang/ref/ファイナライザー 0 2 com/ibm/nio/cs/DirectEncoder 0 38 java/lang/reflect/コンストラクター 0 33 java/util/jar/JarFile 0 19200 Java/言語/StackOverflowError 0 5 java/セキュリティ/AccessControlContext 0 2 [Ljava/言語/スレッド; 0 4 java/lang/OutOfMemoryError 0 1065 java/util/Hashtable$Entry 0 1 java/io/BufferedInputStream 0 2 java/io/PrintStream 0 2 java/io/OutputStreamWriter 0 428 [私は 0 3 java/lang/ClassLoader$NativeLibrary 0 25 ジャバ/ユーティリティ/ロケール 0 3 sun/misc/URLClassPath 0 30 java/util/zip/インフレータ 0 612 java/util/HashMap$ エントリ 0 2 java/io/ファイル許可 0 10 java/io/オブジェクトストリームフィールド 0 1 java/security/BasicPermissionCollection 0 2 java/セキュリティ/保護ドメイン 0 1 java/lang/Integer$1 0 1 java/lang/ref/Reference$ロック 0 1 java/lang/Shutdown$Lock 0 1 Java/言語/ランタイム 0 36 java/io/ファイル記述子 0 1 java/lang/Long$1 0 202 Java/言語/ロング 0 3 java/lang/ThreadLocal 0 3 java/nio/charset/CodingErrorAction 0 2 java/nio/charset/CoderResult 0 1 java/nio/charset/CoderResult$1 0 1 java/nio/charset/CoderResult$2 0 1 太陽/その他/安全でない 0 2 ジャバ/ニオ/バイトオーダー 0 1 java/io/Os400ファイルシステム 0 3 Java/言語/ブール 0 1 Java/言語/ターミネータ$1 0 23 Java/言語/整数 0 2 太陽/その他/NativeSignalHandler 0 1 太陽/その他/Launcher$Factory 0 1 太陽/その他/ランチャー 0 53 [Ljava/言語/クラス; 0 1 java/lang/reflect/ReflectAccess 0 18 sun/reflect/DelegatingConstructorAccessorImpl 0 1 sun/net/www/プロトコル/ファイル/ハンドラ 0 3 ジャバ/ユーティリティ/ハッシュセット 0 3 太陽/ネット/www/プロトコル/jar/ハンドラー 0 1 java/util/jar/JavaUtilJarAccessImpl 0 1 java/net/UnknownContentHandler 0 2 [Ljava/セキュリティ/プリンシパル; 0 10 [Ljava/セキュリティ/証明書/証明書; 0 2 sun/misc/AtomicLongCSImpl 0 3 sun/reflect/DelegatingMethodAccessorImpl 0 1 太陽/セキュリティ/ユーティリティ/ByteArrayLexOrder 0 1 太陽/セキュリティ/ユーティリティ/ByteArrayTagOrder 0 7 太陽/セキュリティ/x509/CertificateVersion 0 7 太陽/セキュリティ/x509/CertificateSerialNumber 0 7 太陽/セキュリティ/x509/シリアル番号 0 7 太陽/セキュリティ/x509/CertificateAlgorithmId 0 7 太陽/セキュリティ/x509/CertificateIssuerName 0 60 日/セキュリティ/x509/RDN 0 60 [Lsun/セキュリティ/x509/AVA; 0 67 太陽/セキュリティ/ユーティリティ/DerInputStream 0 3 [Ljava/数学/BigInteger; 0 2 com/ibm/nio/cs/コンバーター 0 2 sun/nio/cs/StreamEncoder$CharsetSE 0 35 java/lang/ref/SoftReference 0 2 java/nio/HeapByteBuffer 0 2 java/io/BufferedWriter 0 33 sun/misc/URLClassPath$JarLoader 0 4 java/lang/ThreadLocal$ThreadLocalMap$Entry 0 76 ジャバ/ネット/URL 0 1 sun/misc/Launcher$ExtClassLoader 0 1 sun/misc/Launcher$AppClassLoader 0 4 Java/言語/スロー可能 0 7 java/lang/reflect/メソッド 0 2 sun/misc/URLClassPath$FileLoader 0 2 Java/セキュリティ/コードソース 0 2 Java/セキュリティ/権限 0 2 java/io/FilePermissionCollection 0 1 java/lang/ThreadLocal$ThreadLocalMap 0 1 javax/crypto/spec/SecretKeySpec 0 17 java/util/jar/Attributes$Name 0 1 [Ljava/lang/ThreadLocal$ThreadLocalMap$Entry; 0 1 Java/セキュリティ/SecureRandom 0 2 太陽/セキュリティ/プロバイダー/太陽 0 1 java/util/jar/JarFile$JarFileEntry 0 1 java/util/jar/JarVerifier 0 3 太陽/反映/NativeMethodAccessorImpl 0 116 太陽/セキュリティ/ユーティリティ/ObjectIdentifier 0 1 Java/言語/パッケージ 0 2 [S 0 104 Java/数学/BigInteger 0 20 太陽/セキュリティ/x509/AlgorithmId 0 14 太陽/セキュリティ/x509/X500Name 0 14 [Lsun/セキュリティ/x509/RDN; 0 60 太陽/セキュリティ/x509/AVA 0 67 太陽/セキュリティ/ユーティリティ/DerValue 0 67 太陽/セキュリティ/ユーティリティ/DerInputBuffer 0 21 sun/security/x509/AVAキーワード 0 6 太陽/セキュリティ/x509/X509CertImpl 0 7 太陽/セキュリティ/x509/X509CertInfo 0 1 [Lsun/セキュリティ/ユーティリティ/ObjectIdentifier; 0 1 [[Ljava/言語/バイト; 0 3 [[B 0 7 太陽/セキュリティ/プロバイダー/DSAPublicKey 0 7 太陽/セキュリティ/x509/AuthorityKeyIdentifierExtension 0 12 [Ljava/言語/バイト; 0 14 Java/言語/バイト 0 7 太陽/セキュリティ/x509/CertificateSubjectName 0 7 太陽/セキュリティ/x509/CertificateX509Key 0 14 太陽/セキュリティ/x509/KeyIdentifier 0 4 [Z 0 5 sun/text/Normalizer$Mode 0 7 太陽/セキュリティ/x509/CertificateValidity 0 14 Java/ユーティリティ/日付 0 7 太陽/セキュリティ/プロバイダー/DSAParameters 0 7 太陽/セキュリティ/ユーティリティ/BitArray 0 7 太陽/セキュリティ/x509/CertificateExtensions 0 7 java/セキュリティ/AlgorithmParameters 0 7 太陽/セキュリティ/x509/SubjectKeyIdentifierExtension 0 5 sun/security/x509/BasicConstraintsExtension 0 2 太陽/セキュリティ/x509/KeyUsageExtension 0 1 太陽/テキスト/CompactCharArray 0 1 太陽/テキスト/CompactByteArray 0 1 太陽/ネット/www/プロトコル/jar/JarFileFactory 0 1 java/util/Collections$EmptySet 0 1 java/util/Collections$EmptyList 0 1 java/util/Collections$ReverseComparator 0 1 com/ibm/security/jgss/i18n/PropertyResource 0 1 javax/クリプト/b$0 0 1 sun/security/provider/X509Factory 0 1 太陽/反映/BootstrapConstructorAccessorImpl 1 1 sun/reflect/GeneratedConstructorAccessor3202134454 2 1 com/ibm/crypto/provider/IBMJCE 0 6 java/util/ResourceBundle$LoaderReference 0 1 [Lsun/セキュリティ/x509/NetscapeCertTypeExtension$MapEntry; 0 1 com/sun/rsajca/プロバイダ 0 1 com/ibm/security/cert/IBMCertPath 0 1 com/ibm/as400/ibmonly/net/ssl/プロバイダー 0 1 com/ibm/jsse/IBMJSSEProvider 0 1 com/ibm/security/jgss/IBMJGSSProvider 0 5 組織/ietf/jgss/Oid 0 1 java/util/PropertyResourceBundle 0 7 java/util/ResourceBundle$ResourceCacheKey 0 2 太陽/ネット/www/プロトコル/jar/URLJarFile 0 6 太陽/その他/SoftCache$ValueCell 0 1 Java/ユーティリティ/ランダム 0 1 java/util/Collections$EmptyMap 0 112 com/ibm/security/util/ObjectIdentifier 0 5 java/security/Security$ProviderProperty 0 1 java/セキュリティ/証明書/CertificateFactory 0 1 太陽/セキュリティ/プロバイダー/SecureRandom 0 2 java/security/MessageDigest$デリゲート 0 2 太陽/セキュリティ/プロバイダー/SHA 0 1 太陽/ユーティリティ/カレンダー/ZoneInfo 0 4 com/ibm/security/x509/X500Name 0 2 [Ljava/セキュリティ/証明書/X509Certificate; 0 1 sun/reflect/DelegatingClassLoader 0 1 太陽/セキュリティ/x509/NetscapeCertTypeExtension 0 7 太陽/セキュリティ/x509/NetscapeCertTypeExtension$MapEntry 0 3 [[Ljava/言語/文字列; 0 3 java/util/Arrays$ArrayList 0 7 com/ibm/security/x509/NetscapeCertTypeExtension$MapEntry 0 1 com/ibm/security/validator/EndEntityChecker 0 1 java/util/AbstractList$Itr 0 1 com/ibm/security/util/ByteArrayLexOrder 0 1 com/ibm/security/util/ByteArrayTagOrder 0 18 [Lcom/ibm/security/x509/AVA; 0 18 com/ibm/security/util/DerInputStream 0 5 com/ibm/security/util/text/Normalizer$Mode 0 1 com/ibm/security/validator/SimpleValidator 0 1 [Lcom/ibm/security/x509/NetscapeCertTypeExtension$MapEntry; 0 4 [Lcom/ibm/security/x509/RDN; 0 1 java/util/Hashtable$Enumerator 0 4 java/util/LinkedHashMap$Entry 0 1 sun/text/resources/LocaleElements 0 1 sun/text/resources/LocaleElements_en 0 22 com/ibm/security/x509/AVAキーワード 0 4 javax/セキュリティ/認証/x500/X500プリンシパル 0 18 com/ibm/security/x509/RDN 0 18 com/ibm/security/x509/AVA 0 18 com/ibm/security/util/DerInputBuffer 0 18 com/ibm/security/util/DerValue 0 1 com/ibm/security/util/text/CompactCharArray 0 1 com/ibm/security/util/text/CompactByteArray 0 2 java/util/LinkedHashMap 0 1 java/net/InetAddress$1 0 2 [Ljava/ネット/InetAddress; 0 2 java/net/InetAddress$キャッシュ 0 1 java/net/Inet4AddressImpl 0 3 ジャバ/ネット/Inet4アドレス 0 2 java/net/InetAddress$CacheEntry ................................................................... ................................... . グローバル レジストリ情報。 ................................................................... ................................... ローダー オブジェクト クラス名 ------ ---------- ---------- 0 23 [C 0 1017 Java/言語/クラス 0 1 java/lang/ref/Reference$ReferenceHandler 0 1 java/lang/ref/Finalizer$FinalizerThread 0 1 sun/misc/Launcher$AppClassLoader 0 32 java/io/RandomAccessFile 0 32 [B
誰かが私にアドバイスできますか?
どうもありがとう、プラサンナ