Переход от JCE к надувному замку (Blowfish)JAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Переход от JCE к надувному замку (Blowfish)

Сообщение Гость »


I need to convert a JCE based code to a Bouncy Castle based code. I'm completely new to Bouncy Castle and couldn't find a easy-to-understand introduction to this topic in general or my issue specifically. This is the JCE based class:

Код: Выделить всё

import java.security.NoSuchAlgorithmException;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import com.sun.crypto.provider.SunJCE;

public class JCEBlowfishEncrypterDecrypter {

private static final String ALGORITHM = "Blowfish";
public static SecretKeySpec key;

public static String crypt(String msg, String k) throws Exception {
SecretKeySpec key = init(k);
return Hex.byte2hex(intCrypt(msg, key));
}

public static String decrypt(String msg, String k) throws Exception {
SecretKeySpec key = init(k);
return new String(intDecrypt(Hex.hex2byte(msg), key));
}

private static byte[] intCrypt(String msg, SecretKeySpec key) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(1, key);
return cipher.doFinal(msg.getBytes());
}

private static byte[] intDecrypt(byte encrypted[], SecretKeySpec key) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(2, key);
return cipher.doFinal(encrypted);
}

private static SecretKeySpec init(String myKey) throws NoSuchAlgorithmException {
SunJCE sunJce = new SunJCE();
Security.addProvider(sunJce);
byte raw[] = myKey.getBytes();
return new SecretKeySpec(raw, ALGORITHM);
}

}

... And this is the Bouncy Castle based class:

Код: Выделить всё

import org.bouncycastle.crypto.BufferedBlockCipher;
import org.bouncycastle.crypto.engines.BlowfishEngine;
import org.bouncycastle.crypto.paddings.PKCS7Padding;
import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
import org.bouncycastle.crypto.params.KeyParameter;

public class BouncyCastleBlowfishEncrypterDecrypter {

public static String crypt(String msg, String key) throws Exception {
PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new BlowfishEngine(), new PKCS7Padding());
cipher.init(true, new KeyParameter(key.getBytes()));
byte[] inputAsBytes = msg.getBytes();
byte[] encryptedAsBytes = new byte[cipher.getOutputSize(inputAsBytes.length)];
int numberOfBytesCopiedOnEncryptedAsBytes = cipher.processBytes(inputAsBytes, 0, inputAsBytes.length,
encryptedAsBytes, 0);
cipher.doFinal(encryptedAsBytes, numberOfBytesCopiedOnEncryptedAsBytes);
return Hex.byte2hex(encryptedAsBytes);
}

public static String decrypt(String msg, String key) throws Exception {
PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new BlowfishEngine(), new PKCS7Padding());
cipher.init(false, new KeyParameter(key.getBytes()));
byte[] outputConvertedAsBytes = Hex.hex2byte(msg);
byte[] decryptedAsBytes = new byte[cipher.getOutputSize(outputConvertedAsBytes.length)];
int numberOfBytesCopiedOnDecryptedAsBytes = cipher.processBytes(outputConvertedAsBytes, 0,
outputConvertedAsBytes.length, decryptedAsBytes, 0);
cipher.doFinal(decryptedAsBytes, numberOfBytesCopiedOnDecryptedAsBytes);
return new String(decryptedAsBytes);
}
}

... And this is the main method:

Код: Выделить всё

public static void main(String[] args) throws Exception {
String encrypted = JCEBlowfishEncrypterDecrypter.crypt("Test", "mmTSQOFzSL9xAwXGLMEe1Q==");
String decrypted = JCEBlowfishEncrypterDecrypter.decrypt(encrypted, "mmTSQOFzSL9xAwXGLMEe1Q==");

System.out.println("--------------");
System.out.println("encrypted   -> " + encrypted);
System.out.println("decrypted -> " + decrypted);

encrypted = BouncyCastleBlowfishEncrypterDecrypter.crypt("Test",
"mmTSQOFzSL9xAwXGLMEe1Q==");
decrypted = BouncyCastleBlowfishEncrypterDecrypter.decrypt(encrypted,
"mmTSQOFzSL9xAwXGLMEe1Q==");

System.out.println("--------------");
System.out.println("encrypted   -> " + encrypted);
System.out.println("decrypted -> " + decrypted);
}
... But I get some strange additional characters when decrypting:
What's wrong?
Изображение



Источник: https://stackoverflow.com/questions/781 ... e-blowfish
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»