java实现DESede和RSA加解密

 

1.DESede加解密:

 

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

/**
 * 对称加密与解密
 * @author Administrator
 *
 */
public class EncryptData {
	//要加密的明文
	static String str = "123456adasdadqsadqweds7890";
	public static void main(String[] args) {
		System.out.println("明文:"+str);
		try {
			//指定编码特征为utf-8
			byte[] plain1 = str.getBytes("UTF-8");
			//创建密钥生成器 加密算法为DESede
			KeyGenerator generator = KeyGenerator.getInstance("DESede");
			generator.init(168);
			//获得密钥
			SecretKey secretKey = generator.generateKey();
			//获取密钥的二进制编码格式
			byte[] kb = secretKey.getEncoded();
			System.out.println("密钥:");
			//打印密钥 每行8个
			for (int j = 0; j < kb.length; j++) {
				System.out.print(kb[j]+",");
				if(j%8==7) System.out.println();
			}
			//创建加密对象,加密算法DESede
			Cipher cipher = Cipher.getInstance("DESede");
			//加密对象初始化
			cipher.init(Cipher.ENCRYPT_MODE, secretKey);
			//密文存放在字节数组中
			byte[] encrypt = cipher.doFinal(plain1);
			System.out.println("密文:");
			//打印密文
			for (int j = 0; j < encrypt.length; j++) {
				System.out.print(encrypt[j]+",");
				if(j%8==7) System.out.println();
			}
			//切换解密模式
			cipher.init(Cipher.DECRYPT_MODE, secretKey);
			//解密数组
			byte[] cs = cipher.doFinal(encrypt);
			String data = new String(cs);
			System.out.println("解密:"+data);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (NoSuchPaddingException e) {
			e.printStackTrace();
		} catch (InvalidKeyException e) {
			e.printStackTrace();
		} catch (IllegalBlockSizeException e) {
			e.printStackTrace();
		} catch (BadPaddingException e) {
			e.printStackTrace();
		}
	}
}

 2。RSA加解密

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;

public class RSAEncrypt {
	public static void main(String[] args) {
		try {
			//创建密钥生成器,加密算法为RSA
			KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
			//初始化密钥对象,RAS密钥长度为510-2048
			generator.initialize(1024);
			//生成密钥对
			KeyPair keyPair = generator.genKeyPair();
			//获取公钥
			PublicKey pbk = keyPair.getPublic();
			//获取私钥
			PrivateKey prk = keyPair.getPrivate();
			//建立文件输出流 保存公钥
			FileOutputStream fileOutputStream = new FileOutputStream("d:\\key.dat");
			//文件对象输出流
			ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
			//向文件key.dat中输出对象
			objectOutputStream.writeObject(pbk);
			//建立文件输出流 保存私钥
			FileOutputStream fout = new FileOutputStream("d:\\key.dat");
			//文件对象输出流
			ObjectOutputStream objectOutputStream2 = new ObjectOutputStream(fout);
			objectOutputStream2.writeObject(prk);
			//获得公钥,计算指数和模数
			RSAPublicKey pkey = (RSAPublicKey) keyPair.getPublic();
			BigInteger in = pkey.getPublicExponent();
			BigInteger en = pkey.getModulus();
			//明文
			String pltext = "I hava e friend";
			byte[] pb = pltext.getBytes("UTF-8");
			BigInteger bigInteger = new BigInteger(pb);
			//执行加密
			BigInteger bp = bigInteger.modPow(in, en);
			//输出密文
			System.out.println("bi:"+bp);
			//获取私钥以及解密
			RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
			BigInteger nv = privateKey.getPrivateExponent();
			BigInteger mv = privateKey.getModulus();
			//执行解密
			BigInteger bi = bp.modPow(nv, mv);
			//打印明文
			byte[] mt = bi.toByteArray();
			for (int i = 0; i < mt.length; i++) {
				System.out.print((char)mt[i]);
			}
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值