【股票风险防范源码】【如皋长源码头视频】【学源码程序的好处】BouncyCastle 源码

2024-11-20 19:19:40 来源:linux源码编译方式 分类:焦点

1.如何实现用javascript实现rsa加解密

BouncyCastle 源码

如何实现用javascript实现rsa加解密

       å…·ä½“实现思路如下:

       1。服务端生成公钥与私钥,保存。

       2。客户端在请求到登录页面后,随机生成一字符串。

       3。后此随机字符串作为密钥加密密码,再用从服务端获取到的公钥加密生成的随机字符串。

       4。将此两段密文传入服务端,服务端用私钥解出随机字符串,再用此私钥解出加密的密文。

       è¿™å…¶ä¸­æœ‰ä¸€ä¸ªå…³é”®æ˜¯è§£å†³æœåŠ¡ç«¯çš„公钥,传入客户端,客户端用此公钥加密字符串后,后又能在服务端用私钥解出。

       æ­¤æ–‡å³ä¸ºå®žçŽ°æ­¤æ­¥è€Œä½œã€‚

       åŠ å¯†ç®—法为RSA:

       1。服务端的RSA  java实现。

/** 

        *  

        */  

       package com.sunsoft.struts.util;  

         

       import java.io.ByteArrayOutputStream;  

       import java.io.FileInputStream;  

       import java.io.FileOutputStream;  

       import java.io.ObjectInputStream;  

       import java.io.ObjectOutputStream;  

       import java.math.BigInteger;  

       import java.security.KeyFactory;  

       import java.security.KeyPair;  

       import java.security.KeyPairGenerator;  

       import java.security.NoSuchAlgorithmException;  

       import java.security.PrivateKey;  

       import java.security.PublicKey;  

       import java.security.SecureRandom;  

       import java.security.interfaces.RSAPrivateKey;  

       import java.security.interfaces.RSAPublicKey;  

       import java.security.spec.InvalidKeySpecException;  

       import java.security.spec.RSAPrivateKeySpec;  

       import java.security.spec.RSAPublicKeySpec;  

         

       import javax.crypto.Cipher;  

         

         

         

       /** 

        * RSA å·¥å…·ç±»ã€‚提供加密,解密,生成密钥对等方法。 

        * éœ€è¦åˆ°http://www.bouncycastle.org下载bcprov-jdk-.jar。 

        *  

        */  

       public class RSAUtil {   

           /** 

            * * ç”Ÿæˆå¯†é’¥å¯¹ * 

            *  

            * @return KeyPair * 

            * @throws EncryptException 

            */  

           public static KeyPair generateKeyPair() throws Exception {   

               try {   

                   KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA",源码股票风险防范源码  

                           new org.bouncycastle.jce.provider.BouncyCastleProvider());  

                   final int KEY_SIZE = ;// æ²¡ä»€ä¹ˆå¥½è¯´çš„了,这个值关系到块加密的大小,可以更改,但是不要太大,否则效率会低  

                   keyPairGen.initialize(KEY_SIZE, new SecureRandom());  

                   KeyPair keyPair = keyPairGen.generateKeyPair();  

                   saveKeyPair(keyPair);  

                   return keyPair;  

               } catch (Exception e) {   

                   throw new Exception(e.getMessage());  

               }  

           }  

             

           public static KeyPair getKeyPair()throws Exception{   

               FileInputStream fis = new FileInputStream("C:/RSAKey.txt");  

                ObjectInputStream oos = new ObjectInputStream(fis);  

                KeyPair kp= (KeyPair) oos.readObject();  

                oos.close();  

                fis.close();  

                return kp;  

           }  

             

           public static void saveKeyPair(KeyPair kp)throws Exception{   

                 

                FileOutputStream fos = new FileOutputStream("C:/RSAKey.txt");  

                ObjectOutputStream oos = new ObjectOutputStream(fos);  

                //生成密钥  

                oos.writeObject(kp);  

                oos.close();  

                fos.close();  

           }  

         

           /** 

            * * ç”Ÿæˆå…¬é’¥ * 

            *  

            * @param modulus * 

            * @param publicExponent * 

            * @return RSAPublicKey * 

            * @throws Exception 

            */  

           public static RSAPublicKey generateRSAPublicKey(byte[] modulus,  

                   byte[] publicExponent) throws Exception {   

               KeyFactory keyFac = null;  

               try {   

                   keyFac = KeyFactory.getInstance("RSA",  

                           new org.bouncycastle.jce.provider.BouncyCastleProvider());  

               } catch (NoSuchAlgorithmException ex) {   

                   throw new Exception(ex.getMessage());  

               }  

         

               RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(  

                       modulus), new BigInteger(publicExponent));  

               try {   

                   return (RSAPublicKey) keyFac.generatePublic(pubKeySpec);  

               } catch (InvalidKeySpecException ex) {   

                   throw new Exception(ex.getMessage());  

               }  

           }  

         

           /** 

            * * ç”Ÿæˆç§é’¥ * 

            *  

            * @param modulus * 

            * @param privateExponent * 

            * @return RSAPrivateKey * 

            * @throws Exception 

            */  

           public static RSAPrivateKey generateRSAPrivateKey(byte[] modulus,  

                   byte[] privateExponent) throws Exception {   

               KeyFactory keyFac = null;  

               try {   

                   keyFac = KeyFactory.getInstance("RSA",  

                           new org.bouncycastle.jce.provider.BouncyCastleProvider());  

               } catch (NoSuchAlgorithmException ex) {   

                   throw new Exception(ex.getMessage());  

               }  

         

               RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(new BigInteger(  

                       modulus), new BigInteger(privateExponent));  

               try {   

                   return (RSAPrivateKey) keyFac.generatePrivate(priKeySpec);  

               } catch (InvalidKeySpecException ex) {   

                   throw new Exception(ex.getMessage());  

               }  

           }  

         

           /** 

            * * åŠ å¯† * 

            *  

            * @param key 

            *            åŠ å¯†çš„密钥 * 

            * @param data 

            *            å¾…加密的明文数据 * 

            * @return åŠ å¯†åŽçš„数据 * 

            * @throws Exception 

            */  

           public static byte[] encrypt(PublicKey pk, byte[] data) throws Exception {   

               try {   

                   Cipher cipher = Cipher.getInstance("RSA",  

                           new org.bouncycastle.jce.provider.BouncyCastleProvider());  

                   cipher.init(Cipher.ENCRYPT_MODE, pk);  

                   int blockSize = cipher.getBlockSize();// èŽ·å¾—加密块大小,如:加密前数据为个byte,而key_size=  

                   // åŠ å¯†å—大小为  

                   // byte,加密后为个byte;因此共有2个加密块,第一个  

                   // byte第二个为1个byte  

                   int outputSize = cipher.getOutputSize(data.length);// èŽ·å¾—加密块加密后块大小  

                   int leavedSize = data.length % blockSize;  

                   int blocksSize = leavedSize != 0 ? data.length / blockSize + 1  

                           : data.length / blockSize;  

                   byte[] raw = new byte[outputSize * blocksSize];  

                   int i = 0;  

                   while (data.length - i * blockSize > 0) {   

                       if (data.length - i * blockSize > blockSize)  

                           cipher.doFinal(data, i * blockSize, blockSize, raw, i  

                                   * outputSize);  

                       else  

                           cipher.doFinal(data, i * blockSize, data.length - i  

                                   * blockSize, raw, i * outputSize);  

                       // è¿™é‡Œé¢doUpdate方法不可用,查看源代码后发现每次doUpdate后并没有什么实际动作除了把byte[]放到  

                       // ByteArrayOutputStream中,而最后doFinal的时候才将所有的byte[]进行加密,可是到了此时加密块大小很可能已经超出了  

                       // OutputSize所以只好用dofinal方法。  

         

                       i++;  

                   }  

                   return raw;  

               } catch (Exception e) {   

                   throw new Exception(e.getMessage());  

               }  

           }  

         

           /** 

            * * è§£å¯† * 

            *  

            * @param key 

            *            è§£å¯†çš„密钥 * 

            * @param raw 

            *            å·²ç»åŠ å¯†çš„数据 * 

            * @return è§£å¯†åŽçš„明文 * 

            * @throws Exception 

            */  

           public static byte[] decrypt(PrivateKey pk, byte[] raw) throws Exception {   

               try {   

                   Cipher cipher = Cipher.getInstance("RSA",  

                           new org.bouncycastle.jce.provider.BouncyCastleProvider());  

                   cipher.init(cipher.DECRYPT_MODE, pk);  

                   int blockSize = cipher.getBlockSize();  

                   ByteArrayOutputStream bout = new ByteArrayOutputStream();  

                   int j = 0;  

         

                   while (raw.length - j * blockSize > 0) {   

                       bout.write(cipher.doFinal(raw, j * blockSize, blockSize));  

                       j++;  

                   }  

                   return bout.toByteArray();  

               } catch (Exception e) {   

                   throw new Exception(e.getMessage());  

               }  

           }  

         

           /** 

            * * * 

            *  

            * @param args * 

            * @throws Exception 

            */  

           public static void main(String[] args) throws Exception {   

               RSAPublicKey rsap = (RSAPublicKey) RSAUtil.generateKeyPair().getPublic();  

               String test = "hello world";  

               byte[] en_test = encrypt(getKeyPair().getPublic(),test.getBytes());  

               byte[] de_test = decrypt(getKeyPair().getPrivate(),en_test);  

               System.out.println(new String(de_test));  

           }  

       }

        2.测试页面:

       IndexAction.java

更多资讯请点击:焦点

热门资讯

游戏世界 源码_游戏源码网站

2024-11-20 18:30980人浏览

正98源码_正版源码

2024-11-20 18:17900人浏览

阅读书源码_阅读书源码复制

2024-11-20 17:52327人浏览

wstmall源码

2024-11-20 17:18697人浏览

实惠喵源码_实惠喵邀请码

2024-11-20 17:03597人浏览

推荐资讯

p2p网贷系统源码 下载_免费p2p网贷系统源码

1.什么是好的p2p网贷系统开发源码?什么是好的p2p网贷系统开发源码? 好的P2P系统源码有: 一、可理解的 好的代码会在日后维护过程迅速的明白是什么意思。 二、性能好 p2p网

红黑源码_红黑平台

1.红黑联盟网站内容2.VOLUME;VOL,VOLSTICK;公式源码译为全部中文3.面试官:从源码分析一下TreeSet基于jdk1.8)4.STL源码剖析9-set、multiset红黑联盟网站

ps去源码

1.psȥԴ??2.ps的源码是开源的吗ps的源码是开源的吗还是关的3.用PS打开源码有横线竖线如何取消用ps打开源码有横线竖线如何取消4.ps制作完成后怎么转换为源代码ps制作完成后怎么转换为源代码