解密数字标志bouncycastle

时间:2014-06-11 14:17:41

标签: java encryption bouncycastle

我使用此answer中的代码有一个示例如何签名和验证签名,但我怎么能使用Bouncycastle解密这种签名? java.security.Signature类中没有这样的方法。

1 个答案:

答案 0 :(得分:0)

我认为您的意思是说您正在寻找带有bouncycastle的加密/解密样本,而不是您在问题中引用的签名/验证样本。为了做到这一点,您可以使用javax.crypto.Cipher类而不是java.security.Signature我在ECB模式下使用AES算法给出了一个简单的示例(请注意,有许多密码算法,操作模式等。此示例是只是为了展示基础知识):

import java.security.Key;
import java.security.Security;

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

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class CipherBasicSample
{
    public static void main(String args[]) throws Exception
    {
        Security.addProvider(new BouncyCastleProvider());

        // text to cipher
        String secret = "secret";

        // create the key to cipher an decipher
        KeyGenerator kg = KeyGenerator.getInstance("AES","BC");
        kg.init(128);
        SecretKey sk = kg.generateKey();
        Key key = new SecretKeySpec(sk.getEncoded(), "AES");

        // get a cipher instance
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "BC");
        // init to encrypt mode
        cipher.init(Cipher.ENCRYPT_MODE, key);
        // encrypt the text
        cipher.update(secret.getBytes());
        byte[] secretEncrypt = cipher.doFinal();

        System.out.println("Encrypt text: " + new String(secretEncrypt));

        // get a cipher instance
        Cipher decipher = Cipher.getInstance("AES/ECB/PKCS5Padding", "BC");
        // init to decrypt mode
        decipher.init(Cipher.DECRYPT_MODE, key);
        // decrypt the text
        decipher.update(secretEncrypt);
        byte[] secretDecrypt = decipher.doFinal();

        System.out.println("Encrypt text: " + new String(secretDecrypt));
    }
}

此外,您可以查看bc.prov源代码,其中有一些测试类来测试不同的密码实现:src codeon gitHub

希望这有帮助,