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

前言

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

关于加密

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

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

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

下面小编一一介绍并通过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个密钥(非对称对+对称密钥)
安全性 防篡改,不可逆 依赖密钥安全 依赖数学难题安全 综合安全等级最高
推荐场景 需要验证但不需要解密的场景 内部系统、大量加密 密钥分发、身份认证 公网通信、高安全要求

制作不易 礼貌集赞

相关推荐
独行soc8 小时前
2026年渗透测试面试题总结-18(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
浩浩测试一下9 小时前
内网---> WriteOwner权限滥用
网络·汇编·windows·安全·microsoft·系统安全
Loo国昌10 小时前
【大模型应用开发】第六阶段:模型安全与可解释性
人工智能·深度学习·安全·transformer
乾元10 小时前
终端安全(EDR):用深度学习识别未知勒索软件
运维·人工智能·网络协议·安全·网络安全·自动化·安全架构
安科瑞刘鸿鹏1711 小时前
高速路灯故障难定位?用 ASL600 实现精确单灯监测与维护预警
运维·网络·物联网·安全
darkb1rd20 小时前
四、PHP文件包含漏洞深度解析
网络·安全·php
哆啦code梦21 小时前
2024 OWASP十大安全威胁解析
安全·系统安全·owasp top 10
网络安全研究所1 天前
AI安全提示词注入攻击如何操控你的智能助手?
人工智能·安全
海心焱1 天前
安全之盾:深度解析 MCP 如何缝合企业级 SSO 身份验证体系,构建可信 AI 数据通道
人工智能·安全
程序员哈基耄1 天前
纯客户端隐私工具集:在浏览器中守护你的数字安全
安全