博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RSA加密算法的java实现
阅读量:4949 次
发布时间:2019-06-11

本文共 3465 字,大约阅读时间需要 11 分钟。

package rsa; import java.security.*; import java.security.interfaces.*; import javax.crypto.*; public class Test {
         protected static RSAPrivateKey privateKey;     protected static RSAPublicKey publicKey;     protected static byte[] resultBytes;          public Test(){
        try{
            String message = "广东省广州市越秀区";              //            Test p = new Test();             System.out.println("明文是" + message);                          //生成公钥和私钥对,基于RSA算法生成对象             KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");                          //初始化密钥对生成器,密钥大小为1024位             keyPairGen.initialize(1024);                          //生成一个密钥对,保存在keyPair中             KeyPair keyPair = keyPairGen.generateKeyPair();                          //得到私钥和公钥             privateKey =(RSAPrivateKey) keyPair.getPrivate();             publicKey = (RSAPublicKey)keyPair.getPublic();                           //            System.out.println(privateKey.toString());                          //用公钥加密             byte[] srcBytes = message.getBytes();             resultBytes = Test.encrypt(publicKey, srcBytes);             String result = new String(resultBytes);             System.out.println("用公钥加密后密文是:" + result);              //            return privateKey; //            //用私钥解密 //            byte[] decBytes = Test.decrypt(privateKey,resultBytes); //            String dec = new String(decBytes); //            System.out.println("用私钥加密后的结果是:" + dec);         }catch(Exception e){
            e.printStackTrace();         } //        return null;     }          protected static byte[] encrypt(RSAPublicKey publicKey,byte[] srcBytes){
        if(publicKey != null){                         try{
                //Cipher负责完成加密或解密工作,基于RSA                 Cipher cipher = Cipher.getInstance("RSA");                                  //根据公钥,对Cipher对象进行初始化                 cipher.init(Cipher.ENCRYPT_MODE, publicKey);                                  //加密,结果保存进resultBytes,并返回                 byte[] resultBytes = cipher.doFinal(srcBytes);                 return resultBytes;             }catch(Exception e){
                e.printStackTrace();             }         }         return null;     }          protected static byte[] decrypt(RSAPrivateKey privateKey,byte[] encBytes){
        if(privateKey != null){
            try{
                Cipher cipher = Cipher.getInstance("RSA");                                  //根据私钥对Cipher对象进行初始化                 cipher.init(Cipher.DECRYPT_MODE, privateKey);                                  //解密并将结果保存进resultBytes                 byte[] decBytes = cipher.doFinal(encBytes);                 return decBytes;             }catch(Exception e){
                e.printStackTrace();             }         }         return null;     } }
package rsa;public class PrivateKeyTest {    public static void main(String[] args){        Test test = new Test();        //        System.out.println(Test.privateKey);//        String msg = new String(Test.resultBytes);                byte[] decBytes = Test.decrypt(Test.privateKey, Test.resultBytes);        String dec = new String(decBytes);                System.out.println("用私钥加密后的结果是:" + dec);    }}

  在一个项目中,要对二维码进行加密,这是测试RSA加密算法的模块。由于刚接触加密算法,很多细节还不清楚。通过这个测试搞清楚了几点,一是每次加密产生的公钥和私钥都是不同。

  对Java的一些基础知识也有了补充。在定义了静态变量后,用类名调用,并且在之后使用这一静态变量的时候不要再重新定义,不然会产生空指针问题。

 

转载于:https://www.cnblogs.com/waynelin/p/5774209.html

你可能感兴趣的文章
页面加载骨架
查看>>
关于android系统不关屏设置
查看>>
SONY VPCS138EC降级安装XP
查看>>
[luogu4201][bzoj1063]设计路线【树形DP】
查看>>
手机抓包-手机劫持域名到指定服务器
查看>>
被放逐的皇后 金建云
查看>>
Javascript 有用参考函数
查看>>
点群的判别(三)
查看>>
GNSS 使用DFT算法 能量损耗仿真
查看>>
网页抓取 总结
查看>>
【vue】vue中v-charts的使用
查看>>
【转】Simulink模型架构指导
查看>>
MYSQL数据库的导出的几种方法
查看>>
SQL Server-5种常见的约束
查看>>
硬件之美
查看>>
[转载]java开发中的23种设计模式
查看>>
arm:启动代码判断是从nand启动还是从norflash启动,拷贝程序到内存的过程
查看>>
表格的拖拽功能
查看>>
QT5:QSS
查看>>
函数的形参和实参
查看>>