java对称加为密DESede 与 非对称加密RSA 示例
2014-05-15 15:36
417 查看
对称密钥
EncryptDecryptData.java:
非对称密钥
RSAEncryptData.java
EncryptDecryptData.java:
package com.cjq.save; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; //对称密钥 public class EncryptDecryptData { static String plaintext = "12345678123456781234567812345678"; public static void main(String[] args) throws Exception { System.out.println("明文"); System.out.println(plaintext); //转换为字节数组,指定字符串特征为UTF8,以使不同平台加、解密时不引起错误 byte[] plaintext1 = plaintext.getBytes("UTF8"); //创建一个密钥生成器对象,加密算法为DESede KeyGenerator keygen = KeyGenerator.getInstance("DESede"); keygen.init(168); //获得密钥 SecretKey secretkey = keygen.generateKey(); byte[] kb = secretkey.getEncoded(); // int i=0; System.out.println("密钥:"); for(int i=0;i<kb.length;i++){ System.out.print(kb[i]+","); if(i%8==7) System.out.println(); } //创建要求的加密对象,加密算法为DESede Cipher cipher = Cipher.getInstance("DESede"); //加密对象初始化 cipher.init(Cipher.ENCRYPT_MODE, secretkey); byte[] encrypted = cipher.doFinal(plaintext1); System.out.println("密文:"); for(int i=0;i<encrypted.length;i++){ System.out.print(encrypted[i]+","); if(i%8==7) System.out.println(); } //对象cipher初始化成解密模式 cipher.init(Cipher.DECRYPT_MODE, secretkey); byte[] decrypted = cipher.doFinal(encrypted); String str = new String(decrypted); System.out.println("解密后的原文:"); System.out.println(str); } }
非对称密钥
RSAEncryptData.java
package com.cjq.save; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.math.BigInteger; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; //非对称密钥 public class RSAEncryptData { public static void main(String[] args) throws Exception{ //创建一个密钥生成器对象,选择加密算法RSA KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA"); //初始化对象生成器,RSA密钥长度510-2048 keygen.initialize(1024); //生成密钥对 KeyPair kp = keygen.genKeyPair(); //获得公钥 PublicKey pbk = kp.getPublic(); //获得私钥 PrivateKey pvk = kp.getPrivate(); //建立文件rsapbkey.dat输出流,保存公钥 FileOutputStream fout = new FileOutputStream("rsapbkey.dat"); //建立文件对象输出流 ObjectOutputStream oout = new ObjectOutputStream(fout); //向文件rsapbkey.dat输出对象obj oout.writeObject(pbk); oout.close(); //建立文件rsapykey.dat输出流,保存私钥 FileOutputStream foutv= new FileOutputStream("rsapykey.dat"); //建立文件对象输出流 ObjectOutputStream ooutb = new ObjectOutputStream(foutv); //向文件rsapykey.dat输出对象 ooutb.writeObject(pvk); ooutb.close(); //获得公钥,计算指数e和模数n RSAPublicKey rsapbk = (RSAPublicKey)kp.getPublic(); BigInteger e = rsapbk.getPublicExponent(); BigInteger n = rsapbk.getModulus(); String ptext="I have a friend!"; byte[] pb = ptext.getBytes("UTF8"); BigInteger m =new BigInteger(pb); //执行计算,返回密文 BigInteger bi = m.modPow(e, n); System.out.println("bi="+bi); //获得私钥参数及解密 RSAPrivateKey rsapvk = (RSAPrivateKey)kp.getPrivate(); BigInteger dv = rsapvk.getPrivateExponent(); BigInteger mv = rsapvk.getModulus(); //执行计算,即解密 BigInteger mm = bi.modPow(dv, mv); byte[] mt = mm.toByteArray(); for(int i=0;i<mt.length;i++){ System.out.print((char)mt[i]); } } }
相关文章推荐
- java对称加为密DESede 与 非对称加密RSA 示例
- Java对称与非对称加密解密,AES与RSA
- Java对称与非对称加密解密,AES与RSA
- Java对称与非对称加密解密,AES与RSA
- Java对称与非对称加密解密,AES与RSA
- Java安全之对称加密、非对称加密、数字签名
- Java安全之对称加密、非对称加密、数字签名
- [Java_算法]Java加密技术--单向加密算法和双向对称/非对称算法
- Java非对称加密的源代码(RSA)
- RSA(非对称)压缩加密/解压缩解密||AES(对称)压缩加密/解压缩解密
- java安全之加密(对称与非对称)
- Java安全之对称加密、非对称加密、数字签名
- java非对称加密的源代码(RSA)
- Java中RSA非对称密钥加解密使用示例
- java非对称加密RSA的工具类及其源代码
- Java安全之对称加密、非对称加密、数字签名
- java非对称加密的源代码(RSA)
- Java安全之对称加密与非对称加密
- 对称加密DES和非对称加密RSA的实现
- JAVA RSA非对称加密 XMLSignature/X509Certificate