如何使用BouncyCastle加密任意数据类型?

时间:2013-09-19 04:30:01

标签: java encryption bouncycastle

有人可以向我展示如何使用BouncyCastle(或类似的API)对除String以外的数据类型进行Java加密的示例吗?

我想加密其他Java类型,例如IntegerDoubleDate等。我已查看过bouncycastle.org但找不到其API的任何文档。

2 个答案:

答案 0 :(得分:0)

我可以给你加密字节数组的代码,希望可能会以某种方式帮助你。记住下面的ENCRYPTION_KEY值可以是任何东西,它完全取决于你。

 // Cryptographic algorithm
  private final String ALGORITHM = "AES";
  //
 private final byte[] ENCRYPTION_KEY = new byte[]
 {
        'E', 'r', ';', '|', '<', '@', 'p', 'p', 'l', '1', 'c', '@', 't', '1', '0', 'n'
 };

public byte[] encryptValue(byte[] valueToEnc) throws EncryptionException
{
    try
    {
        // Constructs a secret key from the given byte array and algorithm
        Key key = new SecretKeySpec(ENCRYPTION_KEY, ALGORITHM);
        // Creating Cipher object by calling getInstance() factory methods and
        // passing ALGORITHIM VALUE = "AES" which is a 128-bit block cipher
        // supporting keys of 128, 192, and 256 bits.
        Cipher c = Cipher.getInstance(ALGORITHM);
        // Initialize a Cipher object with Encryption Mode and generated key
        c.init(Cipher.ENCRYPT_MODE, key);
        // To encrypt data in a single step, calling doFinal() methods: If we
        // want to encrypt data in multiple steps, then need to call update()
        // methods instead of doFinal()
        byte[] encValue = c.doFinal(valueToEnc);
        // Encrypting value using Apache Base64().encode method
        byte[] encryptedByteValue = new Base64().encode(encValue);

        return encryptedByteValue;
    }
    catch (Exception e)
    {
        throw new EncryptionException(e.getMessage(), e);
    }
}

希望这会有所帮助。

答案 1 :(得分:0)

加密是一种始终对二进制数据执行的操作。您见过的任何与String对象一起使用的示例都会在此过程中的某些时刻将这些字符串转换为字节数组。

目标是定义一种将数据转换为字节数组表示的规范方法。完成此操作后,您可以使用Internet上的示例代码执行加密。

例如,您可能希望将Integer转换为四字节数组。也许使用如下代码:

ByteBuffer.allocate(4).putInt(integerValue).array()

最好将Date转换为UNIX时间戳,然后使用上面的代码转换为字节数组。

加密数据的收件人必须了解如何将其序列化为字节数组,以便它们可以反转该过程。请注意,对于字符串,重要的是双方都同意转换为/从字节数组转换时使用的字符集。