• 利用java api 实现 RSA算法


    package abchat.org.security;
    import java.security.*;
    import javax.crypto.*;
    import javax.crypto.spec.*;
    /**
    *
    * @author GuoXiaoHe
    */
    public class ABchatRSA {
       
        /** Creates a new instance of ABchatRSA */
        /*构建需要的函数变量*/
        private KeyPairGenerator kePaGen=null;                //秘密钥匙生成器;
        private KeyPair          keyPair=null;                //钥匙对,公尺 和米尺;
        private PublicKey        publicKey=null;              //共匙;
        private PrivateKey       privateKey=null;             //密匙;
        private int             keySize    =512;               //密匙长
       
        public ABchatRSA(int keysize) {
            this.keySize= keysize;
            try{
            this.kePaGen= KeyPairGenerator.getInstance("RSA"); //
            this.kePaGen.initialize(this.keySize);  
            //
            this.keyPair=this.kePaGen.genKeyPair();
            this.privateKey=this.keyPair.getPrivate();
            this.publicKey=this.keyPair.getPublic();
             //this.abcharRsaCipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");
            }catch( Exception err){
                err.printStackTrace();
            }
          
        }
        public PublicKey getPublicKey()
        {
            return this.publicKey;
        }
        public PrivateKey getPrivateKey()
        {
            return this.privateKey;
        }
        public static String encripyRSA(String platxt,PublicKey publickey)
        {
            String cipherStr=null;                              //返回的加密后的字符串;     
            byte[]plainByte=null;                              //获得明文的byte数组;
            byte[]cipherByte;                                    //产生秘闻的byte数组;                         
            Cipher cipher =null;
            try{         
            plainByte=platxt.getBytes("ISO-8859-1");
            cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");
            cipher.init(Cipher.ENCRYPT_MODE,publickey);
            cipherByte=cipher.doFinal(plainByte);       
            cipherStr=new String(cipherByte,"ISO-8859-1");
             }catch(Exception err){
                err.printStackTrace();
                System.out.println("error in en: "+err.toString());
            }
            return cipherStr;
        }
       
        public static String decripyRSA(String cphtxt,PrivateKey privateKey)
        {
             byte[] cipherByte =null;                             //获得秘闻的byte数组;       
             byte[] plainByte   =null;                             //解密后的明文数组;
             String   plainStr    =null;                            //解密后的明文数组;
             Cipher   cipher      =null;                            //加密用;
            try{
                cipherByte       =cphtxt.getBytes("ISO-8859-1");    //统一使用该种编码方式;
                cipher =Cipher.getInstance("RSA/ECB/PKCS1Padding");
                cipher.init(Cipher.DECRYPT_MODE,privateKey);
                plainByte=cipher.doFinal(cipherByte);
                plainStr=new String(plainByte,"ISO-8859-1");        
            }catch(Exception err)
            {

                err.printStackTrace();
            }
            return plainStr;
        }
       
       
        public static void main(String []args)
        {
            ABchatRSA arsa=new ABchatRSA(512);
            String en=ABchatRSA.encripyRSA("HELLO world",arsa.getPublicKey());     
            String de=ABchatRSA.decripyRSA(en,arsa.getPrivateKey());
            System.out.println(de);       
        }
    }

  • 相关阅读:
    day006 数字类型和字符串类型的内置方法
    awk技巧 nginx access.log
    测试访问速度
    ELK Deployed
    jenkins权限控制
    linux 系统优化
    nginx 刷新显示404
    虚拟机安装的ubutun全屏
    在线生成二维码
    GIT 命令集
  • 原文地址:https://www.cnblogs.com/langtianya/p/2995113.html
Copyright © 2020-2023  润新知