对称加密、非对称加密、DH协定、数字证书、SSL实现安全通信

本文介绍了网络安全中的加密技术,包括对称加密算法(如DESede)和非对称加密算法(如RSA),以及DH协定。对称加密效率高但秘钥管理困难,非对称加密解决了这个问题但计算量大。DH算法则在提高效率的同时保持可靠性。此外,文章还讨论了数字证书和SSL在确保安全通信中的作用,以及数字认证机制防止伪造证书的方法。SSL通过建立安全信道,确保数据传输的安全性和完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么要加密

当数据从一个ip到另一个ip的过程中,往往是需要经过很多的ip才能到达目标ip,这个过程可以通过tracert命令来查看,比如,输入一个淘宝的网址,跟踪它的路由,如下:
在这里插入图片描述
我们可以发现,这个过程经过了很多的ip,我们不知道这些ip是谁的主机,只知道我们的数据经过了它们。数据的传输是以字节的形式的,如果不加密,这些数据可以轻易人获取并得到内部的信息,因此这种明文传输的方式是不安全的。一旦采取了加密的手段,只要第三方不了解解密的手段,那么他就无法获取其中的信息。

对称加密算法

概念:顾名思义,这种加密算法是“对称”的,发送方和接收方持有一把相同的钥匙,当发送方需要发送数据的时候,只要用这把秘钥加密数据,然后再发送;接收方收到了数据后再用相同的秘钥去解密,就可以还原得到数据。
优点:这种加密算法很方便,效率也比较高。对称加密的可靠性好,不容易被破解。
缺点:这两把秘钥的保管十分重要,一旦其中有一把秘钥被他人得知,数据就不安全了。因为是公共秘钥,秘钥的生成方需要把被加密的数据和秘钥一起发给接收方,接收方才能解密,虽然加密的数据不容易被破解,但是秘钥在传输的过程中任意暴露给第三方,这种以小秘密守护大秘密的方式是不安全的。
这里我使用了DESede算法来演示这个过程:服务器加密数据并通过IO流把数据发给客户端,客户端对数据进行解密。
创建秘钥
秘钥的创建一般分为如下几步:
1、获取秘钥生成器。
2、指定秘钥长度。
3、生成秘钥对象。
4、获取秘钥对象的字节数组。
5、把秘钥信息保存在文件中。

public class CreateDESede {
   
   
	  public static void main(String[] args)throws Exception{
   
   
		  //得到DESede算法的秘钥生成器
		   KeyGenerator kg=KeyGenerator.getInstance("DESede");
		   //指定秘钥长度为168位
		   kg.init(168);
		   //生成秘钥对象
		   SecretKey key=kg.generateKey();
		   //将秘钥以字节形式保存在文件中
		   byte[] data=key.getEncoded();
		   FileOutputStream fos =new FileOutputStream("DESedekey.netjava");
		   fos.write(data);
		   fos.flush();
		   fos.close();
		   System.out.println("DESede秘钥文件生成成功!");
	  }
}

服务器加密并发送数据
服务器首先通过IO流读取秘钥信息,然后用秘钥加密数据,用socket获取流发出去。
加密的实现:生成秘钥对象、密码器对象,设置参数为加密,然后密码器用秘钥来加密数据,就得到了加密后的字节数组。

public class DESSocketServer {
   
   
	public static void main(String[] args)throws Exception{
   
   
		ServerSocket sc=new ServerSocket(9090);
		while(true){
   
   
			Socket client=sc.accept();			
			processConn(client);					
		}
	}	
	/**
	 * 连接并发送数据的方法
	 * @param sc
	 * @throws Exception
	 */
	public static void processConn(Socket sc)throws Exception{
   
   
		//获取原始输出流
		OutputStream ous=sc.getOutputStream();
        //获取秘钥字节
		byte[] keyBytes=getkeyByte();
        //定义内容字符串
		String szSrc = "This is a 3DES test. 测试";
        System.out.println("加密前的字符串:" + szSrc);
        //获取加密后的字节数组
        byte[] encoded = encryptMode(keyBytes, szSrc.getBytes());
        System.out.println("加密后的字符串:" + new String(encoded));
        //把加密后的数据写到客户端
        ous.write(encoded);       
	}	
	/**
	 * 加密的方法
	 * @param keybyte 秘钥文件中读取的字节数组
	 * @param src 需要加密的内容
	 * @return 加密后的内容
	 */
    public static byte[] encryptMode(byte
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值