1

我正在使用 IBM SDK Java 技术版和以下代码:

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());

在运行应用程序时,我遇到了这个异常:

线程“main”javax.crypto.IllegalBlockSizeException 中的异常:输入长度不是 16 字节的倍数。

我在某处读到它与使用“NoPadding”有关,但 MARS 在这个库中没有实现任何填充。任何想法如何避免这种异常?

我需要在这个地方同时使用 MARS 和 ECB。

4

0 回答 0