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
- Java中对称密钥、非对称密钥和数字签名的用法
- 1、对称密钥和非对称密钥
- 对称密钥和非对称密钥
- 非对称密钥-数字签名及数字证书
- https中相关的概念:明文、密文、密码、密钥、对称加密、非对称加密、摘要、数字签名、数字证书。
- "对称/非对称密钥"加密算法
- "对称/非对称密钥"加密算法
- 对称|非对称密钥&完整性
- 对称密钥、非对称密钥,HTTPS
- 对称密钥、非对称密钥,HTTPS
- 加密解密---非对称密钥/对称密钥
- 对称密钥与非对称密钥
- 对称密钥与非对称密钥
- 对称密钥与非对称密钥
- 对称密钥与非对称密钥
- 对称密钥与非对称密钥
- Java中创建对称密钥的步骤
- Java中创建对称密钥的代码
- Object.prototype.toString.call() 区分对象类型
- document.readyState等属性
- 程序员和美工
- jquery的change 事件 .
- document.readyState等属性
- Java中对称密钥、非对称密钥和数字签名的用法
- vector内存管理
- Java http的get和post请求
- jquery的change 事件 .
- 高效 IEnumerable<T>转DataTable
- Gym
- 数据库:流已关闭 这类索引的分区处于不可用状态
- 通过原型实现javascript Array的去重、最大值和最小值
- Java http的get和post请求