`
沙舟狼客
  • 浏览: 161286 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

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 stub
		
		try {
			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 block
			e.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只能是56
		generator.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 stub
		String 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();
	}

}
 

 

分享到:
评论

相关推荐

    非对称密钥

    4. **数字签名**:非对称密钥还常用于数字签名,发送方使用私钥对信息哈希值进行签名,接收方可以使用发送方的公钥验证签名的真实性,从而确认信息未被篡改。 非对称密钥加密技术对比对称密钥有以下优势: - **...

    X9 TR34–2012 使用非对称技术分配对称密钥的互操作方法:第1部分-使用基于因子分解的公钥密码单边密钥传输.pdf

    这种方法允许两个通信方在不共享任何预共享密钥的情况下建立安全的通信信道,常用于安全通信、数据加密和数字签名等领域。 2. **参考文献**: 报告中可能引用了多个与公钥密码学、对称加密、因子分解难题以及相关...

    非对称加密算法 数字签名算法

    非对称加密算法和数字签名是信息技术中两个关键的安全概念,尤其在网络安全和数据保护方面起着至关重要的作用。在Java编程环境中,这些技术被广泛应用于实现安全通信、身份验证和数据完整性保护。 非对称加密算法,...

    数字签名是非对称密钥加密技术与数字摘要技术的综合应用

    信息技术的发展,大致分为电讯技术的发明,19世纪30年代开始 , 计算机技术的发展,20世纪50年代开始 ,和互联网的使用 20世纪60年代开始三个阶段。...5.数字签名是非对称密钥加密技术与数字摘要技术的综合应用

    Java中的Blowfish对称密钥加密算法类和实例

    Java中的Blowfish对称密钥加密算法是一种广泛使用的数据加密技术,特别是在网络通信和存储安全领域。Blowfish算法由Bruce Schneier在1993年设计,以其高效和安全著称。它属于对称密钥加密体系,这意味着加密和解密...

    java对称/非对称加解密的例子

    在实际应用中,通常结合使用,如HTTPS协议,先用非对称加密交换对称密钥,然后用该密钥进行数据的对称加密,以兼顾效率和安全性。 总结,Java的对称加密如DES、AES和非对称加密如RSA、DSA是保障信息安全的重要工具...

    java RAS非对称公私密钥加密+AES公私密钥加密+过滤器入口出口统一处理

    本文将深入探讨Java环境下使用RSA非对称加密和AES对称加密的方法,以及如何通过过滤器实现入口和出口的统一处理。首先,我们来理解这两种加密算法。 **RSA非对称加密** RSA是一种非对称加密算法,其核心在于一对...

    RSA、Diffie-Hellman、签名、非对称和对称密钥.zip

    在公钥基础设施(PKI)中,非对称密钥用于创建和验证数字签名。发送者使用其私钥对数据进行签名,接收者则用发送者的公钥来验证签名。这确保了数据未被篡改且确实来自声称的发送者。例如,SSL/TLS证书中的数字签名...

    基于java的开发源码-Blowfish对称密钥加密算法类和实例.zip

    基于java的开发源码-Blowfish对称密钥加密算法类和实例.zip 基于java的开发源码-Blowfish对称密钥加密算法类和实例.zip 基于java的开发源码-Blowfish对称密钥加密算法类和实例.zip 基于java的开发源码-Blowfish对称...

    Go-非对称密钥生成

    总的来说,Go语言提供的`crypto`包使得非对称加密和数字签名的实现变得非常方便。通过理解并熟练运用这些技术,开发者可以构建更加安全的应用程序,保护用户数据,防止中间人攻击和其他网络安全威胁。在Go-非对称...

    获取对称密钥及对称加解密demo-java

    在IT领域,对称加密是一种常见的数据保护方法,它涉及到使用相同的密钥进行加密和解密操作。...同时,为了增加安全性,通常会结合非对称加密或密钥分发协议(如Diffie-Hellman)来管理和交换对称密钥。

    非对称加密和对称加密混合应用

    5.用对称密钥对(原文和签名)进行加密 6.用对方的公钥对称密钥进行加密(加密密钥) 7.将密文(5)和加密密钥(6)一起发给对方 接收方: 1.用自己的私钥对加密密钥进行解密,得到对称密钥--也只有自己才能...

    GMT 0051-2016 密码设备管理 对称密钥管理技术规范

    GMT 0051-2016 密码设备管理 对称密钥管理技术规范是中国国家标准,旨在规范对称密钥的生成、分配、存储、使用和销毁等过程。 1. 密钥管理技术概述 密钥管理技术是指对密钥的整个生命周期的管理,包括密钥的生成、...

    GMT 0051 密码设备管理 对称密钥管理技术规范

    - **密钥生命周期管理**:详细介绍了对称密钥从生成、分发、存储到销毁整个生命周期中的安全要求和操作流程。 - **密钥安全管理机制**:深入探讨了用于保护密钥不被非法访问或篡改的安全机制,如密钥封装方法、密钥...

    SQL 非对称密钥 示例代码

    SQL 非对称密钥 创建、删除、加密、解密、全部密匙查看等。

    对称密钥管理系统技术规范(征求意见稿)201406041

    1. **范围**:规范覆盖了对称密钥管理系统的各个方面,包括系统设计、安全要求、功能结构、指令与接口,以及建设要求等,适用于需要使用对称密钥进行数据加密和解密的各类商用密码设备。 2. **规范性引用文件**:...

    0051-2016 密码设备管理 对称密钥管理技术规范.pdf

    0051-2016 密码设备管理 对称密钥管理技术规范.pdf

    Java加密和数字签名编程快速入门

    Java加密和数字签名编程是Java开发中的重要领域,主要用于数据安全和身份验证。在这个快速入门教程中,我们将探讨Java如何实现这些功能,并提供基础实践。 一、Java加密 1. 密码学基础:了解对称加密(如AES)和非...

    Java加密和数字签名编程快速入门.rar_Java加密_java 数字 签名_java 数字签名_数字 签名_数字签名

    通过阅读"Java加密和数字签名编程快速入门",无论是初学者还是有一定经验的开发者,都能掌握Java中加密和数字签名的基本原理和实际应用。"www.pudn.com.txt"可能是提供额外链接或资源的文本文件,而"Java加密和数字...

    Java非对称加密源码实例

    通常,我们会用对称加密来加密大量数据,然后用非对称加密来保护对称密钥,确保密钥的安全传输。 在"Java非对称加密源码实例.zip"这个压缩包中,可能包含了一些具体的Java源代码示例,这些示例展示了如何在实际项目...

Global site tag (gtag.js) - Google Analytics