`
hougbin
  • 浏览: 502446 次
  • 性别: 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算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这种算法在信息安全领域有着广泛的应用,如数字签名、数据加密和密钥交换等。在本演示中,我们将深入探讨RSA...

    数字签名 RSA算法 c++

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

    Rsa算法详解.docx

    ### RSA算法详解 #### 一、RSA算法简介 RSA算法是一种重要的公钥加密技术,它由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家于1977年提出,因此命名为RSA。这一算法是首个既可用于数据加密也能实现数字签名...

    RSA算法演示.rar

    RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是目前最广泛使用的公钥加密算法。它结合了大整数因子分解的数学难题,为数据传输提供了强大的安全保护。在此RAR压缩包中,...

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

    ### RSA算法实现报告 #### 实验环境 - **硬件配置**:处理器:Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz (4CPUs), ~2.4GHz;内存:2048MB RAM - **软件工具**: - 操作系统:Windows 7 旗舰版 - 开发工具:...

    rsa算法

    rsa算法

Global site tag (gtag.js) - Google Analytics