1

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 の両方を使用する必要があります。

4

0 に答える 0