加密技术

MD5:

public class RSAEncryption {
	// 创建密钥对生成器,指定加密和解密算法为RSA
	public String[] Skey_RSA(int keylen) {// 输入密钥长度
		String[] output = new String[keylen];// 用来存储密钥的e n d p q
		try {
			SecureRandom sr = new SecureRandom();
			KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
			kpg.initialize(1024,sr);// 指定密钥的长度,初始化密钥对生成器
			KeyPair kp = kpg.generateKeyPair();// 生成密钥对
			RSAPublicKey puk = (RSAPublicKey) kp.getPublic();// 获得公钥
			RSAPrivateCrtKey prk = (RSAPrivateCrtKey) kp.getPrivate();
			BigInteger e = puk.getPublicExponent();
			BigInteger n = puk.getModulus();
			BigInteger d = prk.getPrivateExponent();
			BigInteger p = prk.getPrimeP();
			BigInteger q = prk.getPrimeQ();
			output[0] = e.toString();
			output[1] = n.toString();
			output[2] = d.toString();
			output[3] = p.toString();
			output[4] = q.toString();
		} catch (Exception e) {
			Logger.getLogger(RSA.class.getName()).log(Level.SEVERE, null, e);
		}
		return output;
	}

	// 加密 在RSA公钥中包含有两个整数信息:e和n。对于明文数字m,计算密文的公式是m的e次方再与n求模。
	public String Enc_RSA(String mingwen, String eStr, String nStr) {
		String miwen = new String();
		try {
			BigInteger e = new BigInteger(eStr);
			BigInteger n = new BigInteger(nStr);
			byte[] ptext = mingwen.getBytes("UTF8");
			BigInteger m = new BigInteger(ptext);
			BigInteger c = m.modPow(e, n);
			miwen = c.toString();
		} catch (Exception e) {
			// TODO: handle exception
			Logger.getLogger(RSA.class.getName()).log(Level.SEVERE, null, e);
		}
		return miwen;
	}

	// 解密
	public String Dec_RSA(String miwen, String dStr, String nStr) {
		StringBuffer mingwen = new StringBuffer();
		BigInteger d = new BigInteger(dStr);// 获取私钥的参数d,n
		BigInteger n = new BigInteger(nStr);
		BigInteger c = new BigInteger(miwen);
		BigInteger m = c.modPow(d, n);
		byte[] mt = m.toByteArray();
		for (int i = 0; i < mt.length; i++) {
			mingwen.append((char)mt[i]);
		}
		return mingwen.toString();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值