图文+示例,带你彻底搞清楚那些加密手段...!

前言

最近,小编在学习的过程中有了解到加密的手段,因此想来分享一下自己学到的一些新知识。如有讲得不好或遗漏 欢迎各位大佬在评论区指出。

关于加密

加密是指通过特定手段将明文存储的内容加密成密文。那么为什么要进行加密呢?

互联网中各种攻击防不胜防,如果敏感内容不加密存储,例如用户密码之类的(一想到自己的密码明晃晃的暴露在传输过程中,是不是有点后背一凉的感觉~),那攻击者就能够轻易获取用户隐私信息并实施攻击。

因此加密是必不可少的。那么加密的手段有哪些?或者我们在针对什么场景应该做什么加密?

下面小编一一介绍并通过node手段简单实现。

hash加密

加密手段中,最常见的就是hash加密,指通过一定的算法将明文转化为密文。

比如将密码abc随机后退3格加密成为dfg,这是一种最简单的加密手段。

现代常见最常见的加密手段有MD5SHA加密等,由于其复杂性hash加密是不可逆的。但是由于hash算法固定,因此同一个密码加密后是相同的密文 ,因此攻击者想到可以通过彩虹表攻击。

故实际生产中,我们往往会往明文先加盐(一段随机的字符串插入),然后再进行hash加密。

使用场景 : 数据库中的密码存储(由于hash不可逆,实则程序员也不知道你的密码)

实现示例: 使用bcrypt进行加密

js 复制代码
//自动加盐并且内嵌
const hashPassword = bcrypt.hashSync(password,10) 
//解密
const compareResult = bcrypt.compareSync(userinfo.password,result[0].password)

对称加密

上面说到了hash算法,但由于hash算法是不可逆的,故常用于存储加密,而实际开发中我们会经常用到传输加密,故对称加密应运而生。

对称加密是指将密码通过密钥加密后生成密文 ,对方再通过同一密钥破解生成的密文。

常见手段AES加密

优缺点 :加密简单,解密速度快。但密钥的管理和传输困难。

实际场景:大量需要被加密的内容

实现示例 :使用CryptoJS进行AES加密

js 复制代码
const cryptoJs = require('crypto-js')

const message = 'hello word'
const key = 'this is key' //实际过程中 对称密钥通常是随机生成的

//加密
const encrypted = cryptoJs.AES.encrypt(message, key)

console.log('对称加密密文:',encrypted.toString())

//将密文解密
const decryptedMessage  = cryptoJs.AES.decrypt(encrypted,key)

console.log('解密:',decryptedMessage.toString(cryptoJs.enc.Utf8))

非对称加密

目的是为了解决上面提到的密钥安全问题,对称加密密钥被截获,密文也就轻易可知了。

非对称加密是指发送端用公钥 进行加密,然后采用私钥进行解密,公钥是公开的,私钥是只有接受方才有的。就像一个箱子,发送方把用锁把箱子锁上,接收方用钥匙解锁。

常见手段 : RSA非对称加密

优缺点 : 由于私钥只有接收方可知,保密性好。但加密和解密比较耗时。

实际场景: 密钥交换,数字签名

实现示例: 使用node原生crypto进行RSA非对称加密

js 复制代码
const crypto = require('crypto')

// 生成RSA密钥对
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
  modulusLength: 2048, // 密钥长度
  publicKeyEncoding: {
    type: 'spki',
    format: 'pem'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'pem'
  }
})

const data = 'hello word';
console.log('原始数据:', data);

// 使用公钥加密
const encryptedData = crypto.publicEncrypt(
  {
    key: publicKey,
    padding: crypto.constants.RSA_PKCS1_OAEP_PADDING
  },
  Buffer.from(data)
)

console.log('加密后 (base64):', encryptedData.toString('base64'))

// 使用私钥解密
const decryptedData = crypto.privateDecrypt(
  {
    key: privateKey,
    padding: crypto.constants.RSA_PKCS1_OAEP_PADDING
  },
  encryptedData
)
console.log('解密后:', decryptedData.toString())

混合加密

上面有说到对称加密和非对称加密的优缺点,那么有没有集两者大成,既适合传输大量内容又密钥管理安全的方案呢? 答案是有的,那就是混合加密。

混合加密是指用非对称加密 加密 对称加密的密钥,可能有点绕,下面详细介绍一下。

加密过程

  1. 服务器生成一对公钥和私钥,将公钥发送给客户端
  2. 客户端收到私钥后,随机生成一对会话密钥(对称密钥)用服务器的公钥加密后发送
  3. 服务器收到密文后,用私钥解密,会话密钥
  4. 此时,服务器和客户端都有会话密钥,此后都使用会话密钥加密对话

优缺点:只需要前期少量资源用于非对称加密,后期可用对称加密传输大量内容,但实现比较复杂

实际场景: http加密的重要手段,现代大量加密场景等。

总结

总的来说,加密是我们开发过程中必不可少的一环,针对不同的环境,做出不同的加密手段是我们作为开发者必不可少的综合技能~

特性 Hash加密 对称加密 非对称加密 混合加密
加密类型 加密存储 加密传输 加密传输 加密传输
核心原理 单向散列函数 相同密钥加解密 公钥加密,私钥解密 非对称加密保护对称密钥
密钥数量 无密钥(有盐值) 1个共享密钥 2个密钥(公钥+私钥) 3个密钥(非对称对+对称密钥)
安全性 防篡改,不可逆 依赖密钥安全 依赖数学难题安全 综合安全等级最高
推荐场景 需要验证但不需要解密的场景 内部系统、大量加密 密钥分发、身份认证 公网通信、高安全要求

制作不易 礼貌集赞

相关推荐
龙亘川2 天前
一网统管AI平台民生业务实践:基于城市数字底座赋能公积金业务服务升级
大数据·安全·智慧城市·开源软件·数据可视化·政务
kybs19912 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
LorryJovens2 天前
【LAAP科研】双系统具身AGI范式研究——基于LAAP认知架构与Jev概率决策模型的系统性技术调研与范式验证
人工智能·gpt·安全·架构
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
山东科恩光电2 天前
提升安全性的关键技术:安全触边在工业自动化中的应用解析
安全
duyacode2 天前
FastAPI为什么成为默认答案
程序员
LONGZETECH2 天前
一线职教实测:风光 580 汽车故障诊断仿真系统,破解实车实训四大核心痛点
人工智能·学习·安全·架构·汽车
Mikko72 天前
jackson-databind 升到 2.21.6 就安全了吗?jackson-core 是另一个坐标,它那条 high 全局库至今没收
java·后端·安全·json
Java_AI工程师2 天前
90%的人写Function Calling,只写了"把参数传给工具执行"这一步,剩下的参数校验、错误重试、超时控制、结果格式化,全是空白。
java·人工智能·程序员