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); } } Код: Выделить всё
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); } } Код: Выделить всё
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); } 
Источник: https://stackoverflow.com/questions/781 ... e-blowfish
Мобильная версия