跳转至

2025年8月22日

面试题

请你介绍一下你知道的加密算法

一般分类如下

  1. 对称加密
  2. 非对称加密
  3. 哈希摘要
  4. 电子签名
  5. 密码存储

其中

  • 对称加密常见的有:DES、AES 等,国家标准有 SM4
  • 非对称加密常见的有:RSA、ECDSA 等,国家标准有 SM2
  • 哈希摘要有:MD5、SHA-2、SHA-3 等,国家标准有 SM3
  • 电子签名有:通常会结合 RSA、ECDSA 和哈希摘要完成签名,或者是 HMAC
  • 密码存储:直接使用哈希摘要作为密码存储,加盐存储,BCrypt

午间演讲示例

对称加密、非对称加密、哈希摘要、电子签名、密码存储

解释对称加密、非对称加密、哈希摘要

  • 对称加密
  • 加密和解密的密钥使用同一个
  • 因为密钥只有一个,所以密钥需要妥善保管
  • 加解密速度快
  • 非对称加密
  • 密钥分成公钥、私钥,其中公钥用来加密、私钥用来解密
  • 只需将私钥妥善保管,公钥可以对外公开
  • 如果是双向通信保证传输数据安全,需要双方各产生一对密钥
    • A把A公钥给B,B把B公钥给A,他们各自持有自己的私钥和对方的公钥
    • A要发消息给B,用B公钥加密数据后传输,B收到后用B私钥解密数据
    • 类似的B要发消息给A,用A公钥加密数据后传输,A收到后用A私钥解密数据
  • 相对对称加密、加解密速度慢
  • 哈希摘要,摘要就是将原始数据的特征提取出来,它能够代表原始数据,可以用作数据的完整性校验
  • 举个例子,张三对应着完整数据
  • 描述张三时,会用它的特征来描述:他名叫张三、男性、30多岁、秃顶、从事java开发、年薪百万,这些特征就对应着哈希摘要,以后拿到这段描述,就知道是在说张三这个人
  • 为什么说摘要能区分不同数据呢,看这段描述:还是名叫张三、男性、30多岁、秃顶、从事java开发、月薪八千,有一个特征不符吧,这时可以断定,此张三非彼张三

午间演讲示例

对称加密是用同一个密钥进行加密和解密,速度快,但密钥管理困难。

非对称加密使用公钥和私钥,公钥加密、私钥解密,只需保护私钥,安全性更高,但速度较慢。

哈希摘要则是不可逆的,它把数据映射成固定长度的“指纹”,常用于校验数据完整性。

解释签名算法

电子签名,主要用于防止数据被篡改

先思考一下单纯用摘要算法能否防篡改?例如

  • 发送者想把一段消息发给接收者
  • 中途 message 被坏人改成了 massage(摘要没改)
  • 但由于发送者同时发送了消息的摘要,一旦接收者验证摘要,就可以发现消息被改过了

坏人开始冒坏水

  • 但摘要算法都其实都是公开的(例如 SHA-256),坏人也能用相同的摘要算法
  • 一旦这回把摘要也一起改了发给接收者,接收者就发现不了

怎么解决?

  • 发送者这回把消息连同一个密钥一起做摘要运算,密钥在发送者本地不随网络传输
  • 坏人不知道密钥是什么,自然无法伪造摘要
  • 密钥也可以是两把:公钥和私钥。私钥留给发送方签名,公钥给接收方验证签名,参考下图
  • 注意:验签和加密是用对方公钥,签名和解密是用自己私钥。不要弄混

午间演讲示例

电子签名的核心作用是防止数据被篡改,并验证消息来源。

如果只用哈希,虽然能发现消息改动,但攻击者也能重新计算一份哈希来欺骗接收方。

解决办法是在生成哈希时引入密钥:发送者用私钥对摘要签名,接收者用公钥来验证。

这样既能保证消息完整性,又能确认确实是发送者发的。

你们项目中密码如何存储

  • 首先,明文肯定是不行的
  • 第二,单纯使用 MD5、SHA-2 将密码摘要后存储也不行,简单密码很容易被彩虹表攻击,例如
  • 攻击者可以把常用密码和它们的 MD5 摘要结果放在被称作【彩虹表】的表里,反查就能查到原始密码
加密结果 原始密码
e10adc3949ba59abbe56e057f20f883e 123456
e80b5017098950fc58aad83c8c14978e abcdef

因此

  • 要么提示用户输入足够强度的密码,增加破解难度
  • 要么我们帮用户增加密码的复杂度,增加破解难度
  • 可以在用户简单密码基础上加上一段盐值,让密码变得复杂
  • 可以进行多次迭代哈希摘要运算,而不是一次摘要运算
  • 还有一种方法就是用 BCrypt,它不仅采用了多次迭代和加盐,还可以控制成本因子来增加哈希运算量,让攻击者知难而退

午间演讲示例

在我们项目里,密码绝对不能用明文存储,也不能只用MD5或SHA,因为简单密码很容易被彩虹表反查,比如“123456”。

解决方法有几种:一是强制用户设置复杂密码;二是在密码基础上加盐并多次哈希;三是更推荐的方式,用BCrypt,它自带加盐和迭代,还能调整成本因子,大大提高破解难度。

比较一下 DES、AES、SM4

它们都是对称加密算法

  • DES(数据加密标准)使用56位密钥,已经不推荐使用
  • AES(高级加密标准)支持 128、192、256位密钥长度,在全球范围内广泛使用
  • SM4(国家商用密码算法)支持 128位密钥,在中国范围内使用

午间演讲示例

按照上面回答即可

比较一下 RSA、ECDSA 和 SM2

它们都是非对称加密算法

  • RSA 的密钥长度通常为 1024~4096,而 SM2 的密钥长度是 256
  • SM2 密钥长度不需要那么长,是因为它底层依赖的是椭圆曲线、离散对数,反过来 RSA 底层依赖的是大数分解,前者在相同安全级别下有更快的运算效率
  • SM2 是中国国家密码算法,在国内受政策支持和推广
  • ECDSA 与 SM2 实现原理类似

午间演讲示例

它们都是非对称加密算法

RSA常用的密钥长度是1024到4096位,而SM2只需要256位,这是因为它基于椭圆曲线,比RSA的大数分解更高效。

SM2是我国的国家标准,在国内广泛推广。

ECDSA和SM2原理类似,都是基于椭圆曲线。