RSA加密算法如何在java项目中实现

  介绍

这篇文章将为大家详细讲解有关RSA加密算法如何在java项目中实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强>一、什么是非对称加密

1,加密的密钥与加密的密钥不相同,这样的加密算法称之为非对称加密

2,密钥分为:公钥,私钥

公钥:可以对外给任何人的加密和解密的密码,是公开的
私钥:通过私钥可以生成公钥,但从公钥被认为无法生成公钥(被推导出的概率小到不考虑)

3,当将要加密的内容用公钥加密的时候,只能用私钥来解密

当将要加密的内容用私钥加密的时候,只能用公钥来解密

4,公钥与私钥的关系,利用一个简单的公式来生成公钥和私钥,即非对称加密的公钥和私钥之间存在某一个公式关系

5,常见的非对称加密算法

RSA、DSA

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。

RSA的算法涉及三个参数,n, e1, e2。

其中,n是两个大质数p, q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。

e1和e2是一对相关的值,e1可以任意取,但要求e1与(p - 1) * (q1)互质;再选择e2,要求(e2 * e1)国防部((p - 1) * (q1))=1 .

(n, e1), (n, e2)就是密钥对。其中(n, e1)为公钥,(n, e2)为私钥。

RSA加解密的算法完全相同,设一个为明文,B为密文,则:A=B ^ e2 mod n; B=^ e1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密)

e1和e2可以互换使用,即:

A=B ^ e1 mod n; B=^ e2 mod n;

<强> 1,RSA密钥的生成,返回一个密钥对对象

密钥对用于非对称加密,密钥对中包含了一个公钥和一个私钥

/* *   *通过指定的密钥长度生成非对称的密钥对   * @param keySize推生成荐使用1024年,2048年,不允许低于1024年   * @return   */公共静态密钥对generateRSAKeyPair (int keySize)生成{   密钥对ret=零;   尝试{//1,准备生成   KeyPairGenerator发电机=KeyPairGenerator.getInstance (“RSA");//2,初始化,设置秘钥长度   generator.initialize (keySize)生成;//3、生成,并且返回   ret=generator.generateKeyPair ();   }捕捉(NoSuchAlgorithmException e) {   e.printStackTrace ();   }   返回受潮湿腐烂;   }

<强> 2,获取私钥和公钥

PublicKey和PrivateKey都是关键类型的

=EncryptUtil.generateRSAKeyPair密钥对密钥对(1024);//获取公钥,可以给任何人
  PublicKey PublicKey=keyPair.getPublic ();//获取私钥
  PrivateKey PrivateKey=keyPair.getPrivate (); 

<强> 3,RSA加密

/* *   * RSA加密   * @param数据需要加密的数据   * @param关键可以是PublicKey,也可以是PrivateKey   * @return   */公共静态byte [] rsaEncrypt (byte[]的数据,键键){   byte [] ret=零;   如果(数据!=零   ,,data.length> 0   ,,钥匙!=null) {//1,创建密码使用RSA   尝试{   密码密码=. getinstance (“RSA");//设置的钥匙   cipher.init (Cipher.ENCRYPT_MODE、关键);   ret=cipher.doFinal(数据);   }捕捉(NoSuchAlgorithmException e) {   e.printStackTrace ();   }捕捉(NoSuchPaddingException e) {   e.printStackTrace ();   }捕捉(InvalidKeyException e) {   e.printStackTrace ();   }捕捉(BadPaddingException e) {   e.printStackTrace ();   }捕捉(IllegalBlockSizeException e) {   e.printStackTrace ();   }   }   返回受潮湿腐烂;   }

<强> 4,RSA解密

/* *   * RSA解密   * @param数据要解密的数据   * @param关键可以是PublicKey,也可以是PrivateKey   * @return   */公共静态byte [] rsaDecrypt (byte[]的数据,键键){   byte [] ret=零;   如果(数据!=零   ,,data.length> 0   ,,钥匙!=null) {//1,创建密码使用RSA   尝试{   密码密码=. getinstance (“RSA");//设置的钥匙   cipher.init (Cipher.DECRYPT_MODE、关键);   ret=cipher.doFinal(数据);   }捕捉(NoSuchAlgorithmException e) {   e.printStackTrace ();   }捕捉(NoSuchPaddingException e) {   e.printStackTrace ();   }捕捉(InvalidKeyException e) {   e.printStackTrace ();   }捕捉(BadPaddingException e) {   e.printStackTrace ();   }捕捉(IllegalBlockSizeException e) {   e.printStackTrace ();   }   }   返回受潮湿腐烂;   }

<强> 5,公钥与私钥的存储

RSA加密算法如何在java项目中实现