IBM SDK Java Technology Edition と以下のコードを使用しています。
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
SecureRandom random = SecureRandom.getInstance("IBMSecureRandom", "IBMJCE");
random.setSeed(longToBytes(System.currentTimeMillis()));
keyGen.initialize(512, random);
KeyPair pairTytus = keyGen.generateKeyPair();
KeyPair pairRomek = keyGen.generateKeyPair();
KeyPair pairAtomek = keyGen.generateKeyPair();
// Making a wrap-key for private keys; based on password.
byte[] key = ("password").getBytes("UTF-8");
MessageDigest sha = MessageDigest.getInstance("SHA-1");
key = sha.digest(key);
key = Arrays.copyOf(key, 16); // use only first 128 bit
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "MARS");
Cipher c1 = Cipher.getInstance("MARS/ECB/NoPadding");
c1.init(Cipher.WRAP_MODE, secretKeySpec);
c1.wrap(pairTytus.getPrivate());
アプリケーションの実行中に、次の例外が発生します。
スレッド「メイン」での例外 javax.crypto.IllegalBlockSizeException: 入力長が 16 バイトの倍数ではありません。
「NoPadding」の使用と関係があるとどこかで読みましたが、MARS はこのライブラリにパディングを実装していません。この例外を回避する方法はありますか?
この場所では、MARS と ECB の両方を使用する必要があります。