Java中对称密钥、非对称密钥和数字签名的用法

来源:互联网 发布:mac怎么用oracle 编辑:程序博客网 时间:2024/05/06 00:19

1、非对称密钥:

 

package com.mysec;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import static com.mysec.myutil.Util.println;public class MDTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubtry {byte[] pw1 = new String("dkfdsfsdflasdfasdfasdf").getBytes();byte[] pw2 = new String("dkfdsfsdflasdfasdfasdf").getBytes();//MD2/MD5/SHA1//非对称密钥MessageDigest md = MessageDigest.getInstance("MD5");System.out.println("服务提供者:"+md.getProvider());byte[] b1 = new String("这是散列字节").getBytes();md.update(b1);byte[] r1 = md.digest(pw1);md.update(b1);byte[] r2 = md.digest(pw2);println("pw1加密后:"+new String(r1));println("pw2加密后:"+new String(r2));//转换为16进制方便读取放入数据库println(convertHex(r1));println(convertHex(r2));println(md.isEqual(r1, r2));//println(md.getAlgorithm());//println(md.getDigestLength());} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static String convertHex(byte[] b){StringBuffer sb = new StringBuffer();for(byte tmp:b){sb.append(Integer.toHexString(tmp&0XFF));}return sb.toString();}}

 

 2、对称密钥算法

 

package com.mysec;import static com.mysec.myutil.Util.println;import java.security.InvalidKeyException;import java.security.Key;import java.security.NoSuchAlgorithmException;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.KeyGenerator;import javax.crypto.NoSuchPaddingException;public class CipherTest {/** * @param args * @throws NoSuchPaddingException  * @throws NoSuchAlgorithmException  */public static byte[] encoder(Key key,String text){return null;}public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {// TODO Auto-generated method stub//对称算法名  String info = "this is a my info!";KeyGenerator generator = KeyGenerator.getInstance("DES");//初始化长度,DES只能是56generator.init(56);//生成密钥Key key = generator.generateKey();byte[] keyEncode = key.getEncoded();println("密钥是:"+toHexString(keyEncode));Cipher cipher  = Cipher.getInstance("DES/ECB/PKCS5Padding");println(cipher.getProvider().getName());println("原文:"+info);//用cipher进行加密cipher.init(Cipher.ENCRYPT_MODE,key);byte[] encoderResult = cipher.doFinal(info.getBytes());println("密文:"+toHexString(encoderResult));//用cipher进行解密cipher.init(Cipher.DECRYPT_MODE, key);byte[] decryptResult = cipher.doFinal(encoderResult);println("解密后:"+new String(decryptResult));}public static String toHexString(byte[] b){StringBuffer sb = new StringBuffer();for(int i=0;i<b.length;i++){sb.append(Integer.toHexString(b[i]&0XFF));}return sb.toString();}}

 

 3、数字签名

package com.mysec;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.Signature;import static com.mysec.myutil.Util.println;public class SignTest {/** * @param args */public static void main(String[] args) throws Exception{// TODO Auto-generated method stubString info = "this is my info!";//获得密钥对KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");//初始化长度generator.initialize(1024);//生成密钥对KeyPair keyPair = generator.generateKeyPair();//获得私钥PrivateKey privateKey = keyPair.getPrivate();println("私钥是:"+toHexString(privateKey.getEncoded()));//获得公钥PublicKey publicKey = keyPair.getPublic();println("公钥是:"+toHexString(publicKey.getEncoded()));Signature sign = Signature.getInstance("MD5WithRSA");//对私钥进行签名sign.initSign(privateKey);sign.update(info.getBytes());//获得签名值byte[] signature = sign.sign();println("签名值是:"+toHexString(signature));//用公钥初始化签名对象sign.initVerify(publicKey);//这里应该是解密后的信息,这里直接用原来的sign.update(info.getBytes());//签证签名if(sign.verify(signature)){System.out.println("验证签名成功!");}else{System.out.println("验证签名失败!");}}public static String toHexString(byte[] b){StringBuffer sb = new StringBuffer();for(int i=0;i<b.length;i++){sb.append(Integer.toHexString(b[i]&0XFF));}return sb.toString();}}
 

 

0 0
原创粉丝点击