Java での RSA の暗号化と復号化

1.はじめに

  • 背景: RSA は、1977 年に Ron Rivest、Adi Shamir、および Leonard Adleman によって提案されました。3 人とも当時 MIT で働いていました。RSAは、3人の姓の頭文字で構成されています[1]。
  • 特徴: 毎回入力するパスワードと口座番号は暗号化された上で異なりますが、md5暗号化は同じです。
  • 注: 公開鍵と秘密鍵はペアにする必要があります。

2. キーペアを生成する

public void generateKeyPair() throws NoSuchAlgorithmException{
    
    
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(1024);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
        RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
        //生成的公钥
        String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded());
        //生成的私钥
        String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded());
    }

3. 公開鍵暗号

/**
     * 公钥加密
     *
     * @param publicKeyString 公钥
     * @param text 待加密的文本
     * @return 加密后的文本
     */
    public static String encryptByPublicKey(String publicKeyString, String text) throws Exception
    {
    
    
        X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] result = cipher.doFinal(text.getBytes());
        return Base64.encodeBase64String(result);
    }

4.秘密鍵の復号化

/**
     * 私钥解密
     *
     * @param privateKeyString 私钥
     * @param text 待解密的文本
     * @return 解密后的文本
     */
    public static String decryptByPrivateKey(String privateKeyString, String text) throws Exception
    {
    
    
        PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] result = cipher.doFinal(Base64.decodeBase64(text));
        return new String(result);
    }

5、必要な jar パッケージの依存関係

<!--常用工具类 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

または直接

<dependency>
     <groupId>commons-codec</groupId>
     <artifactId>commons-codec</artifactId>
</dependency>

おすすめ

転載: blog.csdn.net/weixin_43684214/article/details/128183025