范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

快速了解常用的对称加密算法,再也不用担心面试官的刨根问底

  面试官:说一说你常用的加密算法有哪些?
  加密算法通常被分为两种: 对称加密 和非对称加密 。其中,对称加密算法在加密和解密时使用的密钥相同;非对称加密算法在加密和解密时使用的密钥不同,分为公钥和私钥。此外,还有一类叫做消息摘要算法 ,是对数据进行摘要并且不可逆的算法。
  这次我们了解一下对称加密算法。 对称加密算法
  对称加密算法在加密和解密时使用的密钥相同,或是使用两个可以简单地相互推算的密钥。在大多数的对称加密算法中,加密和解密的密钥是相同的。
  它要求双方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送的信息进行解密,这也是对称加密算法的主要缺点之一。
  常见的对称加密算法有:DES算法、3DES算法、AES算法。 DES算法
  DES算法(Data Encryption Standard)是一种常见的分组加密算法。
  面试官:什么是分组加密算法?
  分组加密算法是将明文分成固定长度的组,每一组都采用同一密钥和算法进行加密,输出也是固定长度的密文。
  由IBM公司在1972年研制,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。
  在DES算法中,密钥固定长度为64位。明文按64位进行分组,分组后的明文组和密钥按位置换或交换的方法形成密文组,然后再把密文组拼装成密文。
  密钥的每个第八位设置为奇偶校验位,也就是第8、16、24、32、40、48、56、64位,所以密钥的实际参与加密的长度为56位。
  我们用Java写个例子: import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; import java.util.Base64;  public class DesUtil {      private static final String DES = "DES";     private static final Charset CHARSET = StandardCharsets.UTF_8;      /**      * 加密      *      * @param input 明文      * @param key   密钥      * @return 密文      * @throws GeneralSecurityException      */     public static String encrypt(String input, String key) throws GeneralSecurityException {         Cipher cipher = Cipher.getInstance(DES);         SecretKey keySpec = new SecretKeySpec(key.getBytes(CHARSET), DES);         cipher.init(Cipher.ENCRYPT_MODE, keySpec);         byte[] data = cipher.doFinal(input.getBytes(CHARSET));         return Base64.getEncoder().encodeToString(data);     }      /**      * 解密      *      * @param input 密文      * @param key   密钥      * @return 明文      * @throws GeneralSecurityException      */     public static String decrypt(String input, String key) throws GeneralSecurityException {         Cipher cipher = Cipher.getInstance(DES);         SecretKey keySpec = new SecretKeySpec(key.getBytes(CHARSET), DES);         cipher.init(Cipher.DECRYPT_MODE, keySpec);         byte[] data = cipher.doFinal(Base64.getDecoder().decode(input));         return new String(data, CHARSET);     }      public static void main(String[] args) throws GeneralSecurityException {         String msg = "我喜欢你,可以做我女朋友吗?";         String key = "One-More";         System.out.println("加密前:" + msg);         String pwd = DesUtil.encrypt(msg, key);         System.out.println("加密后:" + pwd);         System.out.println("解密后:" + DesUtil.decrypt(pwd, key));     } }
  运行结果如下: 加密前:我喜欢你,可以做我女朋友吗? 加密后:i5LZ5aJMrlgN+Pr5IQm87Q14k0kmDLFIPnJmtrGA/xBHG0SivGrqCrc3vXjZoCBm 解密后:我喜欢你,可以做我女朋友吗?
  DES现在已经不是一种安全的加密方法,主要因为它使用的密钥过短,很容易被暴力破解。 3DES算法
  3DES算法(Triple Data Encryption Algorithm)是DES算法的升级版本,相当于是对明文进行了三次DES加密。
  由于计算机运算能力的增强,DES算法由于密钥长度过低容易被暴力破解;3DES算法提供了一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
  在DES算法中,密钥固定长度为192位。在加密和解密时,密钥会被分为3个64位的密钥。
  面试官:3DES算法加密和解密的过程是什么样子的?
  加密过程如下: 使用第一个密钥加密明文。 使用第二个密钥解密上一步的结果。 使用第三个密钥加密上一步的结果。
  解密过程如下: 使用第三个密钥解密明文。 使用第二个密钥加密上一步的结果。 使用第一个密钥解密上一步的结果。
  我们用Java写个例子: import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; import java.util.Base64;  public class TripleDesUtil {      private static final String DESede = "DESede";     private static final Charset CHARSET = StandardCharsets.UTF_8;      /**      * 加密      *      * @param input 明文      * @param key   密钥      * @return 密文      * @throws GeneralSecurityException      */     public static String encrypt(String input, String key) throws GeneralSecurityException {         Cipher cipher = Cipher.getInstance(DESede);         SecretKey keySpec = new SecretKeySpec(key.getBytes(CHARSET), DESede);         cipher.init(Cipher.ENCRYPT_MODE, keySpec);         byte[] data = cipher.doFinal(input.getBytes(CHARSET));         return Base64.getEncoder().encodeToString(data);     }      /**      * 解密      *      * @param input 密文      * @param key   密钥      * @return 明文      * @throws GeneralSecurityException      */     public static String decrypt(String input, String key) throws GeneralSecurityException {         Cipher cipher = Cipher.getInstance(DESede);         SecretKey keySpec = new SecretKeySpec(key.getBytes(CHARSET), DESede);         cipher.init(Cipher.DECRYPT_MODE, keySpec);         byte[] data = cipher.doFinal(Base64.getDecoder().decode(input));         return new String(data, CHARSET);     }      public static void main(String[] args) throws GeneralSecurityException {         String msg = "我喜欢你,可以做我女朋友吗?";         String key = "One-More12345678One.More";         System.out.println("加密前:" + msg);         String pwd = TripleDesUtil.encrypt(msg, key);         System.out.println("加密后:" + pwd);         System.out.println("解密后:" + TripleDesUtil.decrypt(pwd, key));     } }
  运行结果如下: 加密前:我喜欢你,可以做我女朋友吗? 加密后:q/ZWtjDGoxIjmd30he0oZ3XLjJhh/ACedaXaj12Zi3Wtlqz+ZzJmQuScjKuZoONF 解密后:我喜欢你,可以做我女朋友吗?
  虽然3DES算法在安全性上有所提升,但是因为使用了3次DES算法,加密和解密速度比较慢。 AES算法
  AES(Advanced Encryption Standard,高级加密标准)主要是为了取代DES加密算法的,虽然出现了3DES的加密方法,但由于它的加密时间是DES算法的3倍多,密钥位数还是不能满足对安全性的要求。
  1997年1月2号,美国国家标准与技术研究院(NIST)宣布希望征集高级加密标准,用以取代DES。全世界很多密码工作者都提交了自己设计的算法。经过甄选流程,高级加密标准由美国国家标准与技术研究院于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。
  该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以 Rijndael 为名投稿高级加密标准的甄选流程。
  面试官:AES算法的密钥长度是固定的吗?
  AES算法的密钥长度是固定,密钥的长度可以使用128位、192位或256位。
  AES算法也是一种分组加密算法,其分组长度只能是128位。分组后的明文组和密钥使用几种不同的方法来执行排列和置换运算形成密文组,然后再把密文组拼装成密文。
  我们用Java写个例子: import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; import java.util.Base64;  public class AesUtil {      private static final String AES = "AES";     private static final Charset CHARSET = StandardCharsets.UTF_8;      /**      * 加密      *      * @param input 明文      * @param key   密钥      * @return 密文      * @throws GeneralSecurityException      */     public static String encrypt(String input, String key) throws GeneralSecurityException {         Cipher cipher = Cipher.getInstance(AES);         SecretKey keySpec = new SecretKeySpec(key.getBytes(CHARSET), AES);         cipher.init(Cipher.ENCRYPT_MODE, keySpec);         byte[] data = cipher.doFinal(input.getBytes(CHARSET));         return Base64.getEncoder().encodeToString(data);     }      /**      * 解密      *      * @param input 密文      * @param key   密钥      * @return 明文      * @throws GeneralSecurityException      */     public static String decrypt(String input, String key) throws GeneralSecurityException {         Cipher cipher = Cipher.getInstance(AES);         SecretKey keySpec = new SecretKeySpec(key.getBytes(CHARSET), AES);         cipher.init(Cipher.DECRYPT_MODE, keySpec);         byte[] data = cipher.doFinal(Base64.getDecoder().decode(input));         return new String(data, CHARSET);     }      public static void main(String[] args) throws GeneralSecurityException {         String msg = "我喜欢你,可以做我女朋友吗?";         String key = "One-More12345678One.More87654321";         System.out.println("加密前:" + msg);         String pwd = AesUtil.encrypt(msg, key);         System.out.println("加密后:" + pwd);         System.out.println("解密后:" + AesUtil.decrypt(pwd, key));     } }
  运行结果如下: 加密前:我喜欢你,可以做我女朋友吗? 加密后:dT29xX+XpPTO3OMuDw1ASyU/+aNfJ1K+endNUJ84h2KZhqRDNfiO4hAQjOXMCoN4 解密后:我喜欢你,可以做我女朋友吗?
  AES算法是目前应用最广泛的对称加密算法。 总结
  对称加密算法在加密和解密时使用的密钥相同,常见的对称加密算法有:DES算法、3DES算法、AES算法。
  由于安全性低、加密解密效率低,DES算法和3DES算法是不推荐使用的,AES算法是目前应用最广泛的对称加密算法。
  竟然已经看到这里了,你我定是有缘人,留下你的点赞和关注,他日必成大器。
  作者:  万猫学社
  出处:https://www.cnblogs.com/heihaozi/p/15953670.html

明明红警中的科技落后星际争霸500年,为何两者看起来却差不多?Hio(),大麦的星际争霸十万个为什么又和大家见面啦!相信喜欢RTS类游戏的玩家必然对于红色警戒以及星际争霸这两款游戏非常熟悉。两者同为科幻背景的RTS游戏玩家们除了关注本身的游戏风来之国,一场浪漫又令人不舍的像素之旅最近正式发售的一款国产游戏风来之国引起了玩家们不小的讨论,虽然只有1。3G的容量却以及68元的良心价格以及能带来30个小时以上不重复的游戏体验赢得了大量90年代玩家的好评,最关键的巅峰时期的卡卡有多强?追上了风,却不曾追上时光的脚步与其他球王相比,卡卡的辉煌时期实在太短了。时至2021年,卡卡宣布退役,已经是4年前的事。十七年的职业生涯如烟花般转瞬即逝,昔日追风少年在球场中奔跑的身姿还历历在目。对于很多球迷而星际争霸中的虫族如何食用才是安全的?Hio(),大麦的星际争霸十万个为什么又和大家见面啦!在星际2当中有这么一个流传许久的说法,在科普卢星区的某些酒吧流传着一种风味独特的食物,它叫做飞龙烤翅。所用的食材使用的是飞龙的没有最强的舰船,只有最好的搭配!无尽的拉格朗日舰船选择心得无尽的拉格朗日是一款极具深度的科幻策略手游。尤其是舰船系统,每个船都有自己的定位和长短,不能单以舰船品质论英雄,需要玩家认真思考和搭配。笔者作为一名击毁舰船数超3000艘的玩家,现为什么星际争霸中人族枪兵的动力战甲上还需要外挂氧气瓶?Hio(),大麦的星际争霸十万个为什么又和大家见面啦!星际争霸中人族的动力战甲作为游戏中出场率最高的装备之一,其背后的各种设定总能让玩家们津津乐道,尤其是到了星际2中,暴雪更是进一我的游戏半年总结致命躯壳简直让我抓狂的魂类游戏8月18日的魂类游戏致命躯壳发布了,这款游戏,在我通关那一刻,让我不得不先去扒一下这家制作组,到底是什么来路。打开他们的官网,显示这是一家4个核心成员有着资深3A制作经验的制作组,英雄联盟手游评测爷的青春又回来了2019年10月16日,英雄联盟全球十周年庆典里,官方首次曝光了手游版的存在。然后,一转眼,一年过去了,2020年的10月28日,英雄联盟的手游终于在外网公开测试了,一时之间,我看烈火战马评测陆与空一体对战的近代军事竞技多人游戏烈火战马这个游戏有点意思,我们之前做过RTS发展的历史脉络的评测,得到了RTS也就是即时战略类游戏必然衰弱的趋势。那个时候有人问过我,那么全面战争这类RTS会衰落吗?我的认知里是不我的游戏半年总结适合情侣玩的唯美画面的养老送终模拟器2020年8月18日,雷莲花的新作灵魂摆渡人(Spiritfarer)发售了,这个制作组一直以精美的2D画面作为主打,辅之以流畅的动作。但是我还是要说,他们之前的游戏有特色但是就不我的游戏半年总结十字军之王3,中世纪的大奸大恶模拟器十字军之王3也就是ck3,终于在2020年9月2日的时候发布了,上一作的十字军之王2发布的时间是2012,这8年的时间里代表了什么?代表了我们他喵的经历了8年的DLC地狱。1000
为什么那么多人嘴上说着支持国产,却用着苹果手机?我用的是华为感谢您的阅读!为什么很多人嘴上说着支持国产手机,但使用的却是苹果手机?实际上,我们在日常使用手机的过程中,会发现国产手机有了自己的特色,也有了自己的不足。但同时你会发现快看!2021年湖南十大科技新闻出炉三湘都市报新湖南客户端1月13日讯(全媒体记者杨斯涵黄京)扎实推进科技治理体系和治理能力现代化,奋力打造具有核心竞争力的科技创新高地2021年,湖南重大科技创新成果不断刷屏。今天,小辣椒M10Pro魅族魅蓝10参数报价对比小辣椒M10Pro手机机型小辣椒M10Pro魅族魅蓝10最新价格729元799元屏幕尺寸6。8英寸6。5英寸屏幕类型TFTLCDLTPS分辨率16007201600720像素282湖南女孩成超幸运弃婴被世界首富领养网友直呼命运神奇据2022年,福布斯全球富豪实时排行榜上,以1914亿美元的财富,杰克。贝佐斯获得世界首富之位。说起世界首富,大家第一个想到的应该是熟悉的比尔盖茨?作为亚马逊集团的创始人兼首席CE小鹏P7NGP自动导航辅助驾驶公测版将开放2021年1月22日昨日晚间,小鹏汽车正式开启P7车型新一轮OTA升级的小范围公测,XmartOS对应版本号为2。5。0,本次OTA升级是小鹏汽车史上推送功能最多最大的一次,具有历研究拓展麦克斯韦方程组指导高速运动(记者韩扬眉)中科院北京纳米能源与系统研究所所长首席科学家,中科院外籍院士王中林经过数年研究和实验验证,对麦克斯韦方程组进行了成功拓展。拓展型麦克斯韦方程组将麦克斯韦方程组基于静态第八篇Facebook更名注最近很多熟悉的公司都宣布加入元宇宙,所以作为前沿领域,发现速度非常快,变化也很多一Facebook改名的难度1市值万亿美金,不是扎克伯克说改就改2如果改了之后资本市场是否接受3如德生科技人工智能及区块链技术已应用到一卡通运营本报见习记者王镜茹近日,在深交所互动易上,有投资者问到德生科技是否在各地的一卡通运营实践中应用到人工智能区块链等相关技术。德生科技表示目前公司在上述领域均有具体应用场景。其中,在人未来十年,有哪些职业会消失?说起AI(人工智能),我们最耳熟能详的应属谷歌阿尔法狗(AlphaGo)。2017年5月,在中国乌镇围棋峰会上,阿尔法狗与排名世界第一的世界围棋冠军柯洁对战,并以3比0的总比分获胜饿了么保障骑手权益新业态发展平稳近几年随着外卖平台的发展,外卖骑手已经成为一项职业,越来越多的人选择从事外卖配送工作,不过随着外卖产业的蓬勃发展,外卖骑手的安全保障与职业发展权益并没有随之跟进,矛盾日渐凸显,针对Vue3的ref和reactive区别及使用Vue3官方文档中定义响应式数据使用ref()或者reactive()一ref的研究1)ref创建一个响应式数据,一般来说用于创建简单类型的响应式对象,比如StringNumber