奇妙的安全旅行之DES算法(一)

hi,大家好,从今天开始我们介绍加密算法中的对称加密算法。相信大家看了前几篇文章,已经对摘要算法的使用已经有了比较深的认识,摘要算法由于其算法特性,只能单向加密,无法对数据反向解密,这时对称加密算法就出现了。对称算法主要有DES、3DES 和 AES,今天我们重点介绍一下对称加密算法中的DES 算法。

DES 算法介绍

DES (Data Encryption Standard)算法是世界上最常用的加密算法。在很长时间内,许多人心目中“密码生成”与DES一直是个同义词。尽管后来有个叫Electronic Frontier Foundation的组织造了台价值22万的机器尝试破解DES加密的数据,直到现在DES和它的变种3DES(三重数据加密算法)仍然在政府和银行中被广泛使用。

注:在2001年AES算法成为了DES算法的替代品。

国家标准局催生了DES

1973年5月,在尼克松任期,美国国家标准局下发了红头文件,征求加密算法来保护传输过程中的数据。国家标准局等了很久一直没有人投标,一直到1974年8月6日,尼克松卸任前三天,IBM才拿出了自己家开发的一套代号LUCIFER(金星)的东西。美国安全局评估后,在1977年7月15日采用了LUCIFER的一个变种作为数据加密标准DES。

DES很快被非数字媒体采用,比如电话线中的信号加密。在那些年里,国际香料组织IFF曾用DES来加密那些用电话线传输的秘密配方。(“With Data Encryption, Scents Are Safe at IFF,” Computerworld 14, No. 21, 95 (1980))

同时,作为政府之后第二大急需加密的银行业也将DES作为广泛应用的标准,美国国家标准协会ANSI制定了整个银行业的加密规范。1980年采用的ANSI X3.92指定了DES算法的应用。

DES 算法特点

  • DES加密算法属于对称加密,加密与解密用的是同一个密钥。

  • DES加密算法要求密钥必须是8个字节,即64bit长度;有效秘钥长度为56位,每个字节第8位用作奇偶校验。

  • 因为密钥是byte[8],代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用。

  • 加密、解密都需要通过字节数组作为数据和密钥进行处理。

  • DES 算法是两种加密技术的组合:混乱和扩散。先替代后置换。

  • 易于实现,DES 算法只是使用了标准的算术和逻辑运算,其作用的数最多也只有64 位,因此用70年代末期的硬件技术很容易实现。

DES 算法的优缺点

优点:
  • 效率高,算法简单,系统开销小

  • 适合加密大量数据

  • 明文长度和密文长度相等

缺点:
  • 需要以安全方式进行秘钥交换

  • 秘钥管理复杂

DES算法具有很高的安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的,当然,随著科学技术的发展,当出现超高速计算机后,我们可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度。

DES 加密原理:

DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行"异或"运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。

DES的加密过程
  1. 64位密钥经子密钥产生算法产生出16个48位子密钥:K1,K2,…,K16,分别供第1次,第2次,…,第16次加密迭代使用。

  2. 64位明文首先经过初始置换IP,将数据打乱重新排列并分成左右两半,左边32位构成L0,右边32位构成R0。

  3. 第i次加密迭代:由轮函数f实现子密钥Ki对Ri-1的加密,结果为32位的数据组f ( Ri-1 , Ki )。f ( Ri-1 , Ki )再与Li-1模2相加,又得到一个32位的数据组Li-1 ⊕ f ( Ri-1 , Ki )。以Li ⊕ f ( Ri-1 , Ki )作为下一次加密迭代的Ri,以Ri-1作为下一次加密迭代的Li ( i = 1,2,…,16)。

  4. 按照上一步的规则进行16次加密迭代。

  5. 第16次加密迭代结束后,以R16为左,L16为右,合并产生一个64位的数据组。再经过逆初始置换IP-1,将数据重新排列,便得到64位密文。

DES的解密过程
  1. 64位密钥经子密钥产生算法产生出16个48位子密钥:K1,K2,…,K16,分别供第1次,第2次,…,第16次解密迭代使用。

  2. 64位密文首先经过初始置换IP,将数据打乱重新排列并分成左右两半,左边32位构成R16,右边32位构成L16。

  3. 第17-i次解密迭代:由轮函数f实现子密钥Ki对Li的解密,结果为32位的数据组f ( Li , Ki )。f ( Li , Ki )再与Ri模2相加,又得到一个32位的数据组Ri ⊕ f ( Li , Ki )。以Ri ⊕ f ( Li , Ki )作为下一次解密迭代的Li-1,以Li作为下一次解密迭代的Li-1 ( i = 16,15,…,1)。

  4. 按照上一步的规则进行16次解密迭代。

  5. 第16次解密迭代结束后,以L0为左,R0为右,合并产生一个64位的数据组。再经过逆初始置换IP-1,将数据重新排列,便得到64位明文。

DES 算法实现

对称加密算法会有不同的分组模式和填充方式,这里我们使用的分组模式是ECB,填充模式为NoPadding,目前这种方式是比较常见的应用场景,实现代码示例如下:

private static final String DES_ALGORITHM = "DES";private static final String DES_CIPHER = "DES/ECB/NoPadding";// des 加密
public static byte[] encryptDES(String data, String key) throws Exception {// 生成SecretKey对象SecretKey secretKey = desKeyGenerator(key);// Cipher对象实际完成加密操作Cipher cipher = Cipher.getInstance(DES_CIPHER);// 用密匙初始化Cipher对象cipher.init(Cipher.ENCRYPT_MODE, secretKey);// 执行加密操作return cipher.doFinal(data.getBytes());
}// des 解密
public static byte[] decryptDES(byte[] data, String key) throws Exception {// 生成SecretKey对象SecretKey secretKey = desKeyGenerator(key);// Cipher对象实际完成解密操作Cipher cipher = Cipher.getInstance(DES_CIPHER);// 用密匙初始化Cipher对象cipher.init(Cipher.DECRYPT_MODE, secretKey);// 执行解密操作return cipher.doFinal(data);
}/*** DES Key 生成方法** @param key* @return
*/
private static SecretKey desKeyGenerator(String key) {try {// 创建一个DESKeySpec对象DESKeySpec desKey = new DESKeySpec(key.getBytes());// 创建一个密匙工厂SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES_ALGORITHM);// 将DESKeySpec对象转换成SecretKey对象return keyFactory.generateSecret(desKey);} catch (InvalidKeyException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (InvalidKeySpecException e) {e.printStackTrace();}return null;
}/*** Nopadding填充时,明文不是8位的倍数时需补足,这里补位0x00** @param b* @return*/
private static byte[] fillZero(byte[] b) {int len = b.length;//data不足8位以0补足8位if (b.length % 8 != 0) {len = b.length - b.length % 8 + 8;} else {return b;}byte[] needData = null;needData = new byte[len];for (int i = 0; i < len; i++) {needData[i] = 0x00;}System.arraycopy(b, 0, needData, 0, b.length);return needData;
}

查看完整代码请访问:

https://github.com/ForTheDevelopers/JavaSecurity

应用场景

DES算法最常用的场景是银行业,如银行卡收单,信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。另外,在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域,DES算法也被广泛应用,以此来实现关键数据的保密。

总结

上面介绍了一下DES 算法的和DES的实现,3DES算法是DES的变种,并不是一种新的算法,这里就不做过多介绍了,实现方式可以去下载完整源码查看。关于对称加密算法我们还没有完整的讨论对称加密中的分组模式以及填充模式,虽然代码实现中也涉及了分组和填充,下一节我们会详细介绍这部分内容。

DES算法虽然有被破解的可能,但是目前依然在一些金融系统中被广泛使用,尤其工作是在金融方面的小伙伴们,也是需要大家去了解和掌握的,以便于工作中遇到时可以有的放矢。

创作不易,如果大家喜欢本文,欢迎点赞,转发,你的关注是我们继续前进的动力_

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dockerfile拉取私库镜像_还在用Alpine作为你Docker的Python开发基础镜像?其实Ubuntu更好一点...

原文转载自「刘悦的技术博客」https://v3u.cn/a_id_173一般情况下&#xff0c;当你想为你的Python开发环境选择一个基础镜像时&#xff0c;大多数人都会选择Alpine&#xff0c;为什么&#xff1f;因为它太小了&#xff0c;仅仅只有 5 MB 左右&#xff08;对比 Ubuntu 系列镜像接…

2020,再见;2021,我来了!

现在是2021年1月16日下午16点33分&#xff0c;星期六。此时北京正在通报昨日新冠肺炎新增病例情况&#xff0c;这种每天戴口罩的鬼日子还不知道什么时候能结束。最近由于天气变冷&#xff0c;病毒更容易存活和传播&#xff0c;最近一个月就突然又变的非常紧张起来了&#xff0c…

cuda tensorflow版本对应_Windows10下安装tensorflow-gpu(2.2.0)安装教程(避坑+保姆式教学)...

本文实现了Windows10下GPU版本的tensorflow2.2.0的安装&#xff0c;用到的软件主要包括&#xff1a;CUDA 10.2 cuDNN Anaconda tensorflow-gpu 2.2.0。&#xff08;注&#xff1a;此教程在Win7环境下也同样适用&#xff01;另附报错缺少cudart64_101.dll的解决办法&#xff…

奇妙的安全旅行之DES算法(二)

hi&#xff0c;大家好&#xff0c;上一节我们详细介绍了对称加密算法DES的基本内容&#xff0c;由于明文的长度不固定&#xff0c;而加密算法只能处理特定长度的一块数据&#xff0c;所以就需要对比较长的明文进行分组后再加密&#xff0c;但是分组后&#xff0c;最后一组的长度…

c++创建虚拟串口_linux虚拟串口控制器驱动实现——适用于无开发板学习串口驱动...

在上一章我们已经说明了uart驱动的开发流程&#xff0c;本章我们就不再介绍uart相关的接口实现&#xff0c;仅通过实现一个虚拟的串口控制器程序&#xff0c;用以说明虚拟串口的开发流程。本次开发的虚拟串口提供的功能如下&#xff1a;提供两个串口实例串口名称的前缀为vttyU为…

奇妙的安全旅行之AES算法

hi&#xff0c;大家好&#xff0c;今天开始我们来介绍一下对称加密算法中的AES算法。 AES简介 AES&#xff08;英语&#xff1a;Advanced Encryption Standard&#xff0c;缩写&#xff1a;AES&#xff09;&#xff0c;即高级加密标准&#xff0c;在密码学中又称Rijndael加密…

axios vue 回调函数_前端Vue 面试题大全

点蓝色字关注“程序员报刊” 「学习 新闻 招聘 」vue的底层原理?vue组件之间的通信&#xff1f;JS中判断数据类型的方法有几种?最常见的判断方法&#xff1a;typeof判断已知对象类型的方法&#xff1a;instanceof根据对象的constructor判断&#xff1a;constructor无敌万能的…

奇妙的安全旅行之RSA算法

hi&#xff0c;大家好&#xff0c;我是开发者FTD。今天我们开始介绍非对称加密算法。非对称加密算法区别于对称加密算法的主要特点是&#xff0c;非对称加密算法有两个密钥&#xff1a;公钥 (public key) 和私钥 (private key)。公钥和私钥是一对密钥&#xff0c;如果用公钥对数…

易语言多级指针读取_C语言指针难吗?纸老虎而已,纯干货讲解(附代码)

作者&#xff1a;21IC网络整理&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家(ID&#xff1a;chiphome-dy)指针对于C来说太重要。然而&#xff0c;想要全面理解指针&#xff0c;除了要对C语言有熟练的掌握外&#xff0c;还要有计算机硬件以及操作系统等方方面…

奇妙的安全旅行之DSA算法

hi&#xff0c;大家好&#xff0c;我是开发者FTD。今天我们来介绍一下非对称加密算法中的DSA算法。 DSA 算法简介 DSA&#xff08;Digital Signature Algorithm&#xff09;是Schnorr和ElGamal签名算法的变种&#xff0c;被美国NIST作为DSS(DigitalSignature Standard) 数字签…

lisp语言画阿基米德线_【R语言】如何将照片快速转换为素描

【R语言】如何将照片快速转换为素描&#xff08;三行代码给老婆&#xff08;划掉&#xff09;画一张素描&#xff09;_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com最近发现了一个比较好玩的包&#xff0c;叫做sketcher这个包的作用就是将图片转化成素描的样式以下是…

2021年程序员1月薪资统计,你在哪一档?

hi&#xff0c;大家好&#xff0c;我是开发者FTD。2021年1月份马上就要结束了&#xff0c;再过一周多春节也即将来临&#xff0c;春节后估计又是一波跳槽高峰&#xff0c;那我们一起来看一下当前程序员的薪资状况&#xff0c;让大家对于年后是否要换工作也有个心理预期吧。 注&…

海康sip服务器地址_完整SIP/SDP媒体协商概论SDP基础使用要求

接完整SIP/SDP媒体协商概论-SDP基础-核心定义全解。上一个章节笔者介绍了关于SDP的一些核心概念(第一章节和第二章节)&#xff0c;今天&#xff0c;我们继续在此之间讨论SDP的其余基础内容(从第三章节开始)。在以下讨论中&#xff0c;笔者会介绍关于SDP的使用&#xff0c;SDP的…

一月:你今年还回家过年吗?

hi&#xff0c;大家好&#xff0c;我是开发者FTD。一月份对于我来说&#xff0c;是工作和生活渐渐明朗的一个月&#xff0c;之前迷茫的状态感觉在这一个月开始慢慢消失&#xff0c;并让整个人的精神状态开始转变。2021年才刚刚开始&#xff0c;大家也可以对自己新的一年进行一个…

6个座位办公室最佳位置_2021最佳动力艇大奖:6个类别29个入围名单揭晓

年度最佳动力艇大奖由英国杂志《Motor Boat & Yachting》(MBY)主办&#xff0c;经(MBY)深思熟虑&#xff0c;评委们缩小了2021年度最佳动力艇大奖的决赛入围名单。由于旅行限制&#xff0c;今年的形式会有所不同&#xff0c;不能像往年一样测试那么多的船。因此&#xff0c…

奇妙的安全旅行之ECC算法

hi&#xff0c;大家好&#xff0c;我是开发者FTD。今天我们来介绍一下非对称加密算法的ECC算法。 ECC 算法简介 ECC 是 Elliptic Curves Cryptography 的缩写&#xff0c;意为椭圆曲线密码编码学。和RSA算法一样&#xff0c;ECC算法也属于公开密钥算法。最初由 Koblitz 和 Mi…

ant design 预览图片_AntD框架的upload组件上传图片时遇到的一些坑

前言本次做后台管理系统&#xff0c;采用的是 AntD 框架。涉及到图片的上传&#xff0c;用的是AntD的 upload 组件。前端做文件上传这个功能&#xff0c;是很有技术难度的。既然框架给我们提供好了&#xff0c;那就直接用呗。结果用的时候&#xff0c;发现 upload 组件的很多bu…

奇妙的安全旅行之国密算法

hi&#xff0c;大家好&#xff0c;我是开发者FTD。今天我们来介绍一下我们国家密码局制定的加密算法 — 国密算法。 为什么要制定国密算法&#xff1f; 密码算法是保障信息安全的核心技术&#xff0c;尤其是我国最关键的银行业核心领域长期以来都是沿用MD5、3DES、SHA-256、R…

Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(二)

远控木马 SET 同时集成了木马生成工具&#xff0c;可以生成木马并调用MSF框架对远程主机进行控制。直接使用MSF生成木马并控制主机的可参考之前另一篇博文&#xff1a;渗透测试-Kali入侵Win7主机。 控制主机 1、运行 SET&#xff0c;选择创建攻击载荷和监听器&#xff1a; 2…

wdnas群晖nas_西数WD NAS红盘 WD140EFFX 14TB HDD和 SA500 1TB SSD开箱拆解评测

前言每个NAS系统都应该配备足够容量的硬盘&#xff0c;以满足数据存储需求。WD Red 西数红盘存储空间高达14TB&#xff0c;可以为需要构建大容量和高性能NAS存储方案的用户提供解决方案。WD Red西数红盘14T运行安静且热量低&#xff0c;其采用的NASware 3.0技术提高了兼容性、集…