`
hougbin
  • 浏览: 493478 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

RSA 算法

阅读更多
import java.security.Key;   
import java.security.KeyFactory;   
import java.security.KeyPair;   
import java.security.KeyPairGenerator;   
import java.security.PrivateKey;   
import java.security.PublicKey;   
import java.security.interfaces.RSAPrivateKey;   
import java.security.interfaces.RSAPublicKey;   
import java.security.spec.PKCS8EncodedKeySpec;   
import java.security.spec.X509EncodedKeySpec;   
    
import javax.crypto.Cipher;   
    
import sun.misc.BASE64Decoder;   
import sun.misc.BASE64Encoder;   
    
    
public class RSAHelper {   
    
      /**  
       * 得到公钥  
       * @param key 密钥字符串(经过base64编码)  
       * @throws Exception  
       */  
      public static PublicKey getPublicKey(String key) throws Exception {   
            byte[] keyBytes;   
            keyBytes = (new BASE64Decoder()).decodeBuffer(key);   
    
            X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);   
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");   
            PublicKey publicKey = keyFactory.generatePublic(keySpec);   
            return publicKey;   
      }   
      /**  
       * 得到私钥  
       * @param key 密钥字符串(经过base64编码)  
       * @throws Exception  
       */  
      public static PrivateKey getPrivateKey(String key) throws Exception {   
            byte[] keyBytes;   
            keyBytes = (new BASE64Decoder()).decodeBuffer(key);   
    
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);   
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");   
            PrivateKey privateKey = keyFactory.generatePrivate(keySpec);   
            return privateKey;   
      }   
    
      /**  
       * 得到密钥字符串(经过base64编码)  
       * @return  
       */  
      public static String getKeyString(Key key) throws Exception {   
            byte[] keyBytes = key.getEncoded();   
            String s = (new BASE64Encoder()).encode(keyBytes);   
            return s;   
      }   
    
    
      public static void main(String[] args) throws Exception {   
    
            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");   
            //密钥位数   
            keyPairGen.initialize(1024);   
            //密钥对   
            KeyPair keyPair = keyPairGen.generateKeyPair();   
    
            // 公钥   
            PublicKey publicKey = (RSAPublicKey) keyPair.getPublic();   
    
            // 私钥   
            PrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();   
    
            String publicKeyString = getKeyString(publicKey);   
            System.out.println("public:\n" + publicKeyString);   
    
            String privateKeyString = getKeyString(privateKey);   
            System.out.println("private:\n" + privateKeyString);   
    
            //加解密类   
            Cipher cipher = Cipher.getInstance("RSA");//Cipher.getInstance("RSA/ECB/PKCS1Padding");   
    
            //明文   
            byte[] plainText = "我们都很好!邮件:@sina.com".getBytes();   
    
            //加密   
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);   
        byte[] enBytes = cipher.doFinal(plainText);   
    
//通过密钥字符串得到密钥   
            publicKey = getPublicKey(publicKeyString);   
            privateKey = getPrivateKey(privateKeyString);   
    
            //解密   
            cipher.init(Cipher.DECRYPT_MODE, privateKey);   
            byte[]deBytes = cipher.doFinal(enBytes);   
    
            publicKeyString = getKeyString(publicKey);   
            System.out.println("public:\n" +publicKeyString);   
    
            privateKeyString = getKeyString(privateKey);   
            System.out.println("private:\n" + privateKeyString);   
    
            String s = new String(deBytes);   
            System.out.println(s);   
    
    
      }   
    
}   

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    RSA算法演示RSA算法演示

    RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示

    RSA.rar_RSA算法_寻找大素数 rsa_数论算法_简单数论

    RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。...

    RSA实现算法报告关于RSA算法的实现代码

    RSA实现算法报告关于RSA算法的实现代码

    RSA算法工具 RSA算法

    RSA算法工具RSA算法工具RSA算法工具RSA算法工具 RSA算法工具

    VC++实现RSA算法

    VC++实现RSA算法

    RSA算法演示.rar

    RSA算法演示.rar

    RSA算法实验报告 通过对RSA算法的实现,深入了解RSA原理及应用

    RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开...

    一种基于DES和RSA算法的混合密码系统.docx

    加密时把明文分成块,块的大小可变,但不能超过密钥的长度,RSA算法把每一块明文转化为与密钥长度相同的密文块。RSA算法利用了陷门单向函数的一种可逆模指数运算。 本文提出的混合密码系统,通过结合DES算法和RSA...

    RSA算法的纯Python实现(源码)

    RSA算法的纯Python实现,压缩包内共4个文件,分别是 1、大整数的运算库(当然不是算加减乘除的,这个python本身就有)。这个库是计算乘模运算,幂模运算(蒙哥马利算法),最大公约数算法及扩展最大公约数算法(扩展...

    RSA算法的C实现

    MFC界面 相当于一个用RSA算法实现的加密小软件

    Rsa算法详解.docx

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA...

    读硬盘序列号和加密RSA算法.rar

    读硬盘序列号和加密RSA算法.rar 读硬盘序列号和加密RSA算法.rar

    RSA算法加解密

    RSA算法加解密 详细介绍RSA算法的思想 附代码 很详细 绝对非常有用!!

    RSA算法试验报告

    目前的公开密钥算法大部分基于大整数分解、有限域上的离散对数问题和椭圆曲线上的离散对数问题,这些数学难题的构建大部分都需要生成一种超大的素数,尤其在经典的 RSA算法中,生成的素数的质量对系统的安全性有很大...

    数字签名 RSA算法 c++

    包涵三个RSA算法,c++是实现,数字签名的合集,三个独自的程序,可以独自编译运行,VC6.0下编译 包涵三个RSA算法,c++是实现,数字签名的合集,三个独自的程序,可以独自编译运行,VC6.0下编译

    rsa算法

    rsa算法

    密码学RSA算法实现代码

    密码学中的RSA 算法的java代码实现,其中有模的重复平方计算法和中国剩余定理

    中国剩余定理在RSA算法中应用的研究详细实验

    RSA算法中模数和运算效率之间一直存在矛盾,目前一些认证机构已采用模数为 2048 bit 的 RSA 签名方法,这必然会影响签名效率。中国剩余定理对于提高RSA算法的模幂乘运算效率有显著作用,被广泛地应用在加速私钥解密...

    易语言RSA算法演示

    易语言RSA算法演示源码,RSA算法演示

    RSA算法C++实现

    RSA算法C++实现 RSA算法C++实现

Global site tag (gtag.js) - Google Analytics