java使用密钥对加密和解密?

jon*_*ney 3 java encryption cryptography key-pair

有谁知道如何使用RSA公钥和私钥加密和解密字符串对象?

我使用KeyPair生成器在下面创建了私钥和公钥,但我现在想要使用公钥来加密数据,并使用私钥来解密它.

public class Keys {

    private static KeyPairGenerator generator;

    private static KeyPair keyPair;

    private static PrivateKey mPrivateKey;

    private static PublicKey mPublicKey;

    private static SecureRandom secureRandom;

    private static final String SHA1PRNG = "SHA1PRNG";

    public static final String RSA = "RSA";

    private Keys() throws NoSuchAlgorithmException {
        generator = KeyPairGenerator.getInstance("RSA");
    }

    /**
     * Generate private and public key pairs
     * 
     * @throws NoSuchAlgorithmException
     */
    private static void generateKeyPair() throws NoSuchAlgorithmException {
        // create SecureRandom object used to generate key pairs

        secureRandom = SecureRandom.getInstance(SHA1PRNG);

        // initialise generator
        generator = KeyPairGenerator.getInstance(RSA);
        generator.initialize(1024, secureRandom);

        // generate keypair using generator
        keyPair = generator.generateKeyPair();

        // asssign private and public keys
        setPrivateKey(keyPair.getPrivate());
        setPublicKey(keyPair.getPublic());

    }

    /**
     * Get private key from key generated
     * @return
     * @throws NoSuchAlgorithmException
     */
    public static PrivateKey getPrivateKey() throws NoSuchAlgorithmException {

        if (mPrivateKey == null) {
            generateKeyPair();
        }
        return mPrivateKey;
    }

    private static void setPrivateKey(PrivateKey privateKey) {
        mPrivateKey = privateKey;
    }

    /**
     * Get public key from key pair generated
     * 
     * @return
     * @throws NoSuchAlgorithmException
     */
    public PublicKey getPublicKey() throws NoSuchAlgorithmException {
        if (mPublicKey == null) {
            generateKeyPair();
        }
        return mPublicKey;
    }

    private static void setPublicKey(PublicKey publicKey) {
        mPublicKey = publicKey;
    }
Run Code Online (Sandbox Code Playgroud)

这是可能的还是加密必须共享和使用相同的密钥?

主要目的是这个.

我将有两个客户端可以相互发送和接收加密数据.

对于客户A来接收加密数据:

客户端B请求客户A的公钥.客户端B加密字符串并将其发送到客户端A.客户端A接收此加密的字符串,然后使用其自己的私钥对其进行解密.

反之亦然,如果客户B希望接收加密数据.

Dun*_*nes 5

RSA加密只能用于加密小于密钥模数的数据.即2048位RSA公钥只能加密256字节的数据.填充字节需要一些这样的数据,因此通常会留下更少的空间来播放.

通常,这通过混合加密方案来解决.也就是说,数据本身是使用临时对称会话密钥加密的,然后会话密钥使用收件人的公钥加密.加密数据和加密会话密钥都被发送给收件人.

您可能希望考虑类似OpenPGP的东西,它实现了这种行为(以及更多).BouncyCastle是一个针对Java的OpenPGP实现.