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

前言

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

关于加密

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

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

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

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

制作不易 礼貌集赞

相关推荐
叠叠乐9 小时前
中国移动家庭云电脑window关闭所有安全脚本
安全
Jmyd01239 小时前
实训室的 3D 模型涉及肖像文物,数据安全与合规怎么做?
安全·3d·数据安全·虚拟实训
芯盾时代9 小时前
《金融业网络安全管理办法(征求意见稿)》全条款深度拆解(三)
网络·安全·网络安全
敢敢是只喵i10 小时前
一个本地 AI Agent 要操作多个门店或 SaaS 账号,应该怎样安全切换身份?
人工智能·安全·ai·系统架构·业界资讯
Acrel123411 小时前
DC800V 大规模落地,算力机房安全该如何保障
安全
其实防守也摸鱼12 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
深圳海导科技12 小时前
资产防盗追踪系统:物联网高价值资产安全管理|海导科技navynav
科技·物联网·安全
波多利希最高礼仪的握力器12 小时前
安全复制SCP
linux·服务器·安全
其实防守也摸鱼12 小时前
免杀与持久化入门:从载荷免杀到隐蔽通道的完整指南
运维·服务器·数据库·安全·github·copilot·渗透
小五传输13 小时前
杀毒引擎有哪些软件好用?机器人企业文件威胁防护选型指南
大数据·运维·安全