Вот проблема, с которой я столкнулся при шифровании/дешифровании BlowFish.
Приведенный ниже код используется для тестирования шифрования/дешифрования BlowFish.
// Code below omits comments for Brevity
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.math.BigInteger;
public class JBoss {
public static void main(String[] args) throws Exception {
if ((args.length != 2)
|| !(args[0].equals("-e") | args[0].equals("-d"))) {
System.out
.println("Usage:\n\tjava JBoss <-e|-d> <encrypted_password>");
return;
}
String mode = args[0];
byte[] kbytes = "jaas is the way".getBytes();
SecretKeySpec key = new SecretKeySpec(kbytes, "Blowfish");
Cipher cipher = Cipher.getInstance("Blowfish");
String out = null;
if (mode.equals("-e")) {
String secret = args[1];
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encoding = cipher.doFinal(secret.getBytes());
out = new BigInteger(encoding).toString(16);
} else {
BigInteger secret = new BigInteger(args[1], 16);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] encoding = cipher.doFinal(secret.toByteArray());
out = new String(encoding);
}
System.out.println(out);
}
}
Теперь, если я попытаюсь зашифровать строку
u7mzqw2
Я получаю значение как
-7ccb7ff0c2858a
Если я попытаюсь расшифровать
-7ccb7ff0c2858a
Я получаю ошибку, как показано ниже:
java JBoss -d -7ccb7ff0c2858a
Exception in thread "main" javax.crypto.IllegalBlockSizeException: Input length must be multiple of 8 when decrypting with padded cipher
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.BlowfishCipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at JBoss.main(JBoss.java:41)
Весь код здесь
Если я не ошибаюсь, это не имеет ничего общего с исходным значением длиной 7 символов или зашифрованным значением без / 8 = 0, так как работает приведенное ниже.
java JBoss -e qwerty
-40e961f375c2eee6
Java JBoss -d -40e961f375c2eee6
qwerty
Что мне не хватает??
BigInteger
? - person CodesInChaos   schedule 23.01.2013