Java加密算法 RSA

cp5m 9年前發布 | 2K 次閱讀 Java

公鑰加密也稱為非對稱加密、速度慢、加密和解密的鑰匙不相同,某一個人持有私鑰,任何人都可以知道公鑰

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Arrays;

import javax.crypto.Cipher;

/**

  • RSA算法 公鑰加密 非對稱加密
  • @author stone
  • @date 2014-03-11 00:28:38 */
    public class RSA {
    public static final String KEY_ALGORITHM = "RSA";
    public static final String CIPHER_ALGORITHM_ECB1 = "RSA/ECB/PKCS1Padding";
    public static final String CIPHER_ALGORITHM_ECB2 = "RSA/ECB/OAEPWithSHA-1AndMGF1Padding"; //不能用
    public static final String CIPHER_ALGORITHM_ECB3 = "OAEPWithSHA-256AndMGF1Padding"; //不能用

    static PublicKey publicKey;
    static PrivateKey privateKey;
    static Cipher cipher;
    static KeyPair keyPair;

    public static void main(String[] args) throws Exception {

     method1("斯柯達U*(Sfsad7f()*^%%$");  
     method2("斯柯達U*(Sfsad7f()*^%%$");  
     method3("斯柯達U*(Sfsad7f()*^%%$");  
    
    

    }

    /**

    • 公鑰加密,私鑰解密 使用默認CIPHER_ALGORITHM_ECB1
    • @param str
    • @throws Exception */
      static void method1(String str) throws Exception {
      KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);
      KeyPair keyPair = keyGenerator.generateKeyPair();
      publicKey = keyPair.getPublic();
      privateKey = keyPair.getPrivate();
      cipher = Cipher.getInstance(KEY_ALGORITHM);
      cipher.init(Cipher.ENCRYPT_MODE, publicKey); //公鑰加密
      byte[] encrypt = cipher.doFinal(str.getBytes());
      System.out.println("公鑰加密后1:" + Arrays.toString(encrypt));

      cipher.init(Cipher.DECRYPT_MODE, privateKey);//私鑰解密
      byte[] decrypt = cipher.doFinal(encrypt);
      System.out.println("私鑰解密后1:" + new String(decrypt));
      }

      /**

    • 私鑰加密,公鑰解密 使用默認CIPHER_ALGORITHM_ECB1
    • @param str
    • @throws Exception */
      static void method2(String str) throws Exception {
      KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);
      KeyPair keyPair = keyGenerator.generateKeyPair();
      publicKey = keyPair.getPublic();
      privateKey = keyPair.getPrivate();
      cipher = Cipher.getInstance(KEY_ALGORITHM);
      cipher.init(Cipher.ENCRYPT_MODE, privateKey); //私鑰加密
      byte[] encrypt = cipher.doFinal(str.getBytes());
      System.out.println("私鑰加密后2:" + Arrays.toString(encrypt));

      cipher.init(Cipher.DECRYPT_MODE, publicKey);//公鑰解密
      byte[] decrypt = cipher.doFinal(encrypt);
      System.out.println("公鑰解密后2:" + new String(decrypt));
      }

      /**

    • 私鑰加密,公鑰解密 使用CIPHER_ALGORITHM_ECB1 = RSA/ECB/PKCS1Padding
    • @param str
    • @throws Exception */
      static void method3(String str) throws Exception {
      KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);
      KeyPair keyPair = keyGenerator.generateKeyPair();
      publicKey = keyPair.getPublic();
      privateKey = keyPair.getPrivate();
      cipher = Cipher.getInstance(CIPHER_ALGORITHM_ECB1);
      cipher.init(Cipher.ENCRYPT_MODE, privateKey); //私鑰加密
      byte[] encrypt = cipher.doFinal(str.getBytes());
      System.out.println("私鑰加密后3:" + Arrays.toString(encrypt));

      cipher.init(Cipher.DECRYPT_MODE, publicKey);//公鑰解密
      byte[] decrypt = cipher.doFinal(encrypt);
      System.out.println("公鑰解密后3:" + new String(decrypt));
      }
      } </pre>

 本文由用戶 cp5m 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!