亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rsautil.java

?? 簡單的sso實現
?? JAVA
字號:
/**
 * 
 */
package org.yqing.util;

import java.io.ByteArrayOutputStream;
import java.math.BigInteger;
import java.net.URLEncoder;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
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;

import org.bouncycastle.util.encoders.Hex;

/**
 * @author cabby
 * 
 */
public class RSAUtil {

	/**
	 * 生成密鑰對
	 * 
	 * @return KeyPair
	 * @throws EncryptException
	 */
	public static KeyPair generateKeyPair() {
		try {
			KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA",
					new org.bouncycastle.jce.provider.BouncyCastleProvider());
			final int KEY_SIZE = 64;// 這個值關系到塊加密的大小,可以更改,但是不要太大,否則效率會??
			keyPairGen.initialize(KEY_SIZE, new SecureRandom());
			
			KeyPair keyPair = keyPairGen.genKeyPair();
			
			return keyPair;
		} catch (Exception e) {
			throw new RuntimeException(e.getMessage());
		}
	}

	/**
	 * 生成公鑰
	 * 
	 * @param modulus
	 * @param publicExponent
	 * @return RSAPublicKey
	 * @throws EncryptException
	 */
	public static RSAPublicKey generateRSAPublicKey(byte[] modulus,
			byte[] publicExponent)  {
		KeyFactory keyFac = null;
		try {
			keyFac = KeyFactory.getInstance("RSA",
					new org.bouncycastle.jce.provider.BouncyCastleProvider());
		} catch (NoSuchAlgorithmException ex) {
			throw new RuntimeException(ex.getMessage());
		}

		RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(
				modulus), new BigInteger(publicExponent));
		try {
			return (RSAPublicKey) keyFac.generatePublic(pubKeySpec);
		} catch (InvalidKeySpecException ex) {
			throw new RuntimeException(ex.getMessage());
		}
	}

	/**
	 * 生成私鑰
	 * 
	 * @param modulus
	 * @param privateExponent
	 * @return RSAPrivateKey
	 * @throws EncryptException
	 */
	public static RSAPrivateKey generateRSAPrivateKey(byte[] modulus,
			byte[] privateExponent) throws RuntimeException {
		KeyFactory keyFac = null;
		try {
			keyFac = KeyFactory.getInstance("RSA",
					new org.bouncycastle.jce.provider.BouncyCastleProvider());
		} catch (NoSuchAlgorithmException ex) {
			throw new RuntimeException(ex.getMessage());
		}

		RSAPrivateKeySpec priKeySpec = new RSAPrivateKeySpec(new BigInteger(
				modulus), new BigInteger(privateExponent));
		try {
			return (RSAPrivateKey) keyFac.generatePrivate(priKeySpec);
		} catch (InvalidKeySpecException ex) {
			throw new RuntimeException(ex.getMessage());
		}
	}

	/**
	 * 加密
	 * 
	 * @param key
	 *            加密的密
	 * @param data
	 *            待加密的明文數據
	 * @return 加密后的數據
	 * @throws EncryptException
	 */
	public static byte[] encrypt(Key key, byte[] data) {
		try {
			Cipher cipher = Cipher.getInstance("RSA",
					new org.bouncycastle.jce.provider.BouncyCastleProvider());
			cipher.init(Cipher.ENCRYPT_MODE, key);
			int blockSize = cipher.getBlockSize();// 獲得加密塊大小,如:加密前數據為128個byte,??key_size=1024
													// 加密塊大小為127
													// byte,加密后為128個byte;因此共有2個加密塊,第????127
													// 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 RuntimeException(e.getMessage());
		}
	}
	
	public static String encrypt(String modulus,String priExponent,String str){
		byte[] modBytes = new BigInteger(modulus).toByteArray();
		byte[] priPriExpBytes = new BigInteger(priExponent).toByteArray();
		RSAPrivateKey priKey = generateRSAPrivateKey(modBytes, priPriExpBytes);
		byte[] raw = RSAUtil.encrypt(priKey,str.getBytes());
		String result=new String(Hex.encode(raw));
		return result;
	}

	/**
	 * 解密
	 * 
	 * @param key
	 *            解密的密??
	 * @param raw
	 *            已經加密的數??
	 * @return 解密后的明文
	 * @throws EncryptException
	 */
	public static byte[] decrypt(Key key, byte[] raw) {
		try {
			Cipher cipher = Cipher.getInstance("RSA",
					new org.bouncycastle.jce.provider.BouncyCastleProvider());
			cipher.init(cipher.DECRYPT_MODE, key);
			int blockSize = cipher.getBlockSize();
			ByteArrayOutputStream bout = new ByteArrayOutputStream(64);
			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 RuntimeException(e.getMessage());
		}
	}
	
	
	public void demo(){
		/*
		 * modulus: 893f99c3f84b74dce9346da0d6c19d8b
		 * public exponent: 10001
		 * private exponent: 59fe15f8e569b4a9d5cd610b94a410c1
		 */
		String modulus ="188653760425766735526814242366660004217";
		String pubExponent="65537";
		String priExponent="152927654246903025620843468798881510073";
		byte[] modBytes = new BigInteger(modulus).toByteArray();
		byte[] pubPubExpBytes = new BigInteger(pubExponent).toByteArray();
		byte[] priPriExpBytes = new BigInteger(priExponent).toByteArray();
		RSAPublicKey pubKey = generateRSAPublicKey(modBytes,pubPubExpBytes);
		RSAPrivateKey priKey = generateRSAPrivateKey(modBytes, priPriExpBytes);
		byte[] raw = RSAUtil.encrypt(priKey,"aaaaa".getBytes());
		byte[] data = RSAUtil.decrypt(pubKey, raw);
        String des = new String(data);
        System.out.println("decode:"+des);
		
	}
	
	

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		
        KeyPair keyPair = RSAUtil.generateKeyPair();
        RSAPublicKey pubKey = (RSAPublicKey) keyPair.getPublic();
        RSAPrivateKey priKey = (RSAPrivateKey) keyPair.getPrivate();

		byte[] pubModBytes = pubKey.getModulus().toByteArray();
		byte[] pubPubExpBytes = pubKey.getPublicExponent().toByteArray();
        byte[] priModBytes = priKey.getModulus().toByteArray();
        byte[] priPriExpBytes = priKey.getPrivateExponent().toByteArray();
        //RSAPublicKey recoveryPubKey = RSAUtil.generateRSAPublicKey(pubModBytes,pubPubExpBytes);
        //RSAPrivateKey recoveryPriKey = RSAUtil.generateRSAPrivateKey(priModBytes,priPriExpBytes);

        System.out.println(priKey.toString());
        System.out.println("--------------------------");
        System.out.println(pubKey.toString());
        System.out.println();
        System.out.println("--------------------------");
        System.out.println(new BigInteger(pubModBytes));
        System.out.println(new BigInteger(priModBytes));
        System.out.println(new BigInteger(pubPubExpBytes));
        System.out.println(new BigInteger(priPriExpBytes));
        System.out.println("--------------------------");
        byte[] raw = RSAUtil.encrypt(priKey,"-1".getBytes());
        
        String s = new String(raw);
        System.out.println(s);
        for(int i=0;i<10;i++){
        	System.out.println("##:"+i+"##"+URLEncoder.encode(new String(RSAUtil.encrypt(priKey,"cabby".getBytes())),"utf-8"));
        }
        String sen = URLEncoder.encode(new String(raw),"utf-8");
        System.out.println(sen);
        byte[] data = RSAUtil.decrypt(pubKey, raw);
        String des = new String(data);
        System.out.println("decode:"+des);
        
		RSAUtil rsa = new RSAUtil();
		rsa.demo();
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产偷国产偷亚洲高清人白洁| 99视频精品在线| 中文字幕亚洲一区二区va在线| 色婷婷综合激情| 日韩 欧美一区二区三区| 国产精品久久久久久久午夜片| 欧美日韩精品一区视频| 东方aⅴ免费观看久久av| 日本系列欧美系列| 亚洲码国产岛国毛片在线| 欧美一级国产精品| 欧美色男人天堂| 日本高清不卡在线观看| 国产69精品久久久久毛片| 美洲天堂一区二卡三卡四卡视频 | 亚洲国产美国国产综合一区二区| 精品国产伦一区二区三区观看体验| 国产成人综合亚洲91猫咪| 免费高清在线视频一区·| 亚洲激情自拍偷拍| 一区二区高清视频在线观看| 国产精品五月天| 国产精品午夜电影| 国产精品高潮久久久久无| 国产精品水嫩水嫩| 一区二区中文视频| 亚洲黄色片在线观看| 亚洲人一二三区| 亚洲自拍偷拍网站| 日一区二区三区| 精品无人区卡一卡二卡三乱码免费卡| 天堂成人国产精品一区| 免费成人性网站| 国产成人高清视频| 成人app网站| 欧美日韩国产经典色站一区二区三区 | av电影在线观看一区| 91视频www| 欧美二区三区的天堂| 精品99久久久久久| 国产精品免费视频一区| 国产精品不卡视频| 天天影视色香欲综合网老头| 极品瑜伽女神91| 91小宝寻花一区二区三区| 欧美精品自拍偷拍| 中文幕一区二区三区久久蜜桃| 成人欧美一区二区三区1314| 天天综合天天综合色| 久久99蜜桃精品| 91丨九色丨蝌蚪丨老版| 日韩欧美一级在线播放| 国产精品成人免费精品自在线观看| 性感美女极品91精品| 亚洲福中文字幕伊人影院| 亚洲风情在线资源站| 午夜电影久久久| 99久久精品国产麻豆演员表| 4438x成人网最大色成网站| 欧美激情一区二区| 国产一区二区精品久久91| 欧美日本韩国一区| 亚洲人成网站精品片在线观看| 黑人精品欧美一区二区蜜桃| 欧美日韩和欧美的一区二区| 亚洲另类在线视频| 成人av在线网| 1024成人网色www| 国产激情一区二区三区四区| 精品国产一区二区在线观看| 午夜欧美电影在线观看| 在线观看av一区二区| 中文字幕一区二区三区乱码在线| 国产很黄免费观看久久| 久久久欧美精品sm网站| 国产精品77777竹菊影视小说| 精品国精品自拍自在线| 久久精品久久精品| 久久婷婷成人综合色| 国产成人a级片| 最近中文字幕一区二区三区| 春色校园综合激情亚洲| 亚洲欧洲日产国码二区| 色天天综合久久久久综合片| 一区二区在线免费| 欧美日韩一卡二卡三卡| 久久国产精品第一页| 久久色.com| 91一区二区三区在线播放| 亚洲激情校园春色| 91精品国产手机| 国产aⅴ精品一区二区三区色成熟| 久久久久高清精品| 欧美在线不卡视频| 国产原创一区二区三区| 亚洲三级视频在线观看| 日韩三级视频中文字幕| 国产成人av资源| 午夜精品福利一区二区蜜股av| 精品国产乱码久久久久久免费| 99国产一区二区三精品乱码| 天天影视网天天综合色在线播放| 久久精品亚洲精品国产欧美kt∨| 91丨九色丨蝌蚪富婆spa| 久色婷婷小香蕉久久| 亚洲自拍偷拍网站| 国产精品网站在线| 精品久久一区二区三区| 91蝌蚪porny| 成人免费毛片高清视频| 另类小说一区二区三区| 亚洲综合一二三区| 亚洲欧美日韩国产中文在线| 久久网站热最新地址| 欧美一二三在线| 欧美色图第一页| 色av综合在线| 国产一区二区三区免费看| 亚洲欧洲色图综合| 中文字幕亚洲精品在线观看| 国产无人区一区二区三区| 2024国产精品视频| 色婷婷亚洲婷婷| 亚洲第一电影网| 国产精品电影一区二区| 欧美激情综合在线| 亚洲国产精品激情在线观看| 久久久国际精品| 国产精品美日韩| 亚洲欧美综合另类在线卡通| 国产精品国产三级国产普通话蜜臀| 久久蜜桃av一区精品变态类天堂| 精品国产乱子伦一区| 久久久久久影视| 国产亚洲综合性久久久影院| 26uuu国产一区二区三区| 中文字幕av在线一区二区三区| 国产日韩综合av| 亚洲美女淫视频| 同产精品九九九| 国产乱色国产精品免费视频| 丰满少妇在线播放bd日韩电影| a级精品国产片在线观看| 色综合久久中文综合久久97| 91精品国产综合久久久久久久| 日韩亚洲欧美高清| 亚洲啪啪综合av一区二区三区| 午夜伊人狠狠久久| 国产iv一区二区三区| 欧美主播一区二区三区美女| 精品久久久久久久一区二区蜜臀| 国产亚洲一区二区在线观看| 亚洲免费在线视频一区 二区| 日韩成人一级大片| 99久久精品免费看国产| 91精品国产高清一区二区三区 | 91成人网在线| 久久久亚洲精品石原莉奈| 亚洲va韩国va欧美va精品| 成人三级在线视频| 精品日韩一区二区三区免费视频| 亚洲天堂精品在线观看| 国产在线日韩欧美| 欧美另类videos死尸| 综合在线观看色| 高清不卡在线观看av| 欧美电影免费观看高清完整版在 | 亚洲激情五月婷婷| yourporn久久国产精品| 久久久久久综合| 韩国成人福利片在线播放| 日韩网站在线看片你懂的| 亚洲在线观看免费| 在线视频一区二区三区| 亚洲伦理在线精品| 99久久免费精品高清特色大片| 欧美变态口味重另类| 亚洲一区二区欧美激情| 97精品久久久午夜一区二区三区| 久久新电视剧免费观看| 国产高清久久久| 久久久精品2019中文字幕之3| 精品一区二区三区的国产在线播放| 欧美疯狂做受xxxx富婆| 亚洲成人先锋电影| 91精品国产手机| 国产乱淫av一区二区三区 | 国产亚洲1区2区3区| 精品亚洲免费视频| 中文字幕欧美日本乱码一线二线| 国产一区 二区| 中文字幕制服丝袜成人av| 色综合久久88色综合天天 | 日韩综合在线视频| 制服.丝袜.亚洲.中文.综合| 婷婷久久综合九色综合绿巨人 | 这里只有精品免费| 国产成人免费高清| 国产精品国产三级国产aⅴ中文 | 蜜桃免费网站一区二区三区|