
文章目录1、Base64 编码2、MD5 加密3、SHA-256 加密4、AES 对称加密常用5、RSA 非对称加密常用6、什么是对称和非对称加密7、什么是哈希算法1. 核心特征2. 常见算法3. 前端/网络中的典型用途4. 不是加密1、Base64 编码Base64不是一种加密算法而是一种编码方法用于将二进制数据转换为基于64个可打印字符的文本字符串。它常用于在URL、Cookie、网页中传输少量二进制数据以及内嵌小图片以减少服务器访问次数。Base64编码简单对性能影响不大但会增加数据体积约 1/3且无法缓存。functiontoBase64(str){returnbtoa(unescape(encodeURIComponent(str)));}functionfromBase64(str){returndecodeURIComponent(escape(atob(str)));}// 使用示例constoriginalTextHello, World!;constencodedTexttoBase64(originalText);console.log(encodedText);// SGVsbG8sIFdvcmxkIQconstdecodedTextfromBase64(encodedText);console.log(decodedText);// Hello, World!2、MD5 加密MD5是一种广泛使用的哈希函数产生128 位16 字节的哈希值。虽然MD5的计算速度快且效率高但存在碰撞风险且安全性较低因此不推荐直接用于密码存储。importCryptoJSfromcrypto-js;functionmd5Encrypt(str){returnCryptoJS.MD5(str).toString();}// 使用示例constoriginalTextHello, World!;constencryptedTextmd5Encrypt(originalText);console.log(encryptedText);// fc3ff98e8c6a0d3087d515c0473f86773、SHA-256 加密HA-256 是 SHA-2家族中的一种加密哈希算法生成 256 位的哈希值。它比 MD5 更安全适用于分布式系统但加密和解密速度较慢且密钥生成复杂。importCryptoJSfromcrypto-js;functionsha256Encrypt(str){returnCryptoJS.SHA256(str).toString();}// 使用示例constoriginalTextHello, World!;constencryptedTextsha256Encrypt(originalText);console.log(encryptedText);// a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e4、AES 对称加密常用AES是高级加密标准是一种对称加密算法使用相同的密钥进行加密和解密。(1)AES加密对称性加密密钥 1 个加解密都用这个密钥(2)AES为一次一密每次加密都会生成新的密钥(3)AES加密为了增加报文安全性AES加密速度快适合大数据量加密但密钥管理复杂一旦密钥泄露加密数据的安全性会受到威胁。importCryptoJSfromcrypto-js;functionaesEncrypt(data,key){constkeyHexCryptoJS.enc.Utf8.parse(key);constencryptedCryptoJS.AES.encrypt(data,keyHex,{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7});returnencrypted.toString();}functionaesDecrypt(encryptedData,key){constkeyHexCryptoJS.enc.Utf8.parse(key);constdecryptedCryptoJS.AES.decrypt(encryptedData,keyHex,{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7});returndecrypted.toString(CryptoJS.enc.Utf8);}// 使用示例constkey1234567890123456;// AES key 必须为16位AES-12824位AES-192或32位AES-256constoriginalTextHello, World!;constencryptedTextaesEncrypt(originalText,key);console.log(encryptedText);// 密文constdecryptedTextaesDecrypt(encryptedText,key);console.log(decryptedText);// Hello, World!5、RSA 非对称加密常用RSARivest–Shamir–Adleman是一种非对称加密算法它使用一对密钥——公钥和私钥来进行加密和解密操作。公钥用于加密数据而私钥用于解密数据。密钥对生成网站 http://web.chacuo.net/netrsakeypair新建 jsencrypt.ts:import{JSEncrypt}fromjsencrypt;constpublicKeyMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\nnzkXSOVOZbFu/TJhZ7rFANeaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ;constprivateKeyMIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n7NtPrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\nPuH3owIDAQABAkAfoiLyLZ4lf4Myxk6xUDgLaWGximj20CUf5BKKnlrKEd8gA\nkM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\ncSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21vF25WaHYPxCFMvwxpcw99Ecv\nDQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\nYhovyloRYsMIS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\nUP8iWi1Qw0Y;// 加密exportconstencrypt(txt:string){constencryptornewJSEncrypt();encryptor.setPublicKey(publicKey);// 设置公钥returnencryptor.encrypt(txt);// 对数据进行加密};// 解密exportconstdecrypt(txt:string){constencryptornewJSEncrypt();encryptor.setPrivateKey(privateKey);// 设置私钥returnencryptor.decrypt(txt);// 对数据进行解密};组件中使用script setup import { encrypt, decrypt } from /utils/jsencrypt; const text Hello, World!; const encryptedText encrypt(text); // 加密 console.log(加密后的结果----:, encryptedText); const decryptedText decrypt(encryptedText); // 解密 console.log(解密后的结果----, decryptedText); /script输出结果加密后的结果----:I7J3ay7KpwfGz3bEWDv4vuF1orJPwvctzEbfQhnC/B45mJjIhUWNeMLEzHLItECohMbeS8TLbN3SSBTB6u2JVg解密后的结果---- Hello,World!6、什么是对称和非对称加密对称加密Symmetric Encryption对称加密使用同一把密钥进行加密和解密。这意味着发送方和接收方都需要知道相同的密钥。对称加密算法通常速度较快适合用于大量数据的加密。非对称加密Asymmetric Encryption非对称加密使用一对密钥即公钥和私钥。公钥可以公开发布用于加密数据私钥必须保密用于解密数据。非对称加密通常比对称加密慢但由于其安全性更高常用于密钥交换和身份认证等场景。7、什么是哈希算法哈希算法Hash Function是把任意长度的输入通过确定的数学变换映射成固定长度的、看似随机的输出哈希值 / 摘要 / 指纹的规则。1. 核心特征特征解释例子确定性同一输入永远得到同一输出hello→2cf24dba…每次一样定长输出输出长度固定与输入大小无关SHA-256 永远 256 bit不可逆从输出无法反推输入单向函数知道5d41402a…算不回hello雪崩效应输入轻微改动输出天差地别hellovshallo→ 几乎全变抗碰撞难以找到两个输入产生同一输出理想状态下几乎不可能2. 常见算法算法输出长度场景状态MD5128 bit旧校验/分片❌ 已不安全SHA-1160 bitGit、老 TLS❌ 已不安全SHA-256256 bit区块链、HTTPS、JWT✅ 主流SHA-3 / BLAKE3可变新一代✅ 更安全MurmurHash32/64/128 bit哈希表、分片✅ 高性能、非加密3. 前端/网络中的典型用途缓存校验文件指纹app.4e5c67.js判断是否重新下载密码存储bcrypt(password salt)保存摘要而不是明文数据结构JavaScript 对象、Map、Set内部哈希表分片上传按文件内容哈希生成etag秒传/断点续传URL 签名?signSHA256(secretpathexp)防篡改4. 不是加密哈希 ≠ 加密。加密是可逆的需要密钥哈希是单向的。因此“解密哈希”是伪概念正确说法应是“暴力破解”或“查彩虹表”。哈希算法是数字世界的指纹机给任何数据拍一张不可逆、唯一且定长的“指纹照”用来校验、索引、签名、去重、存密码。 感谢阅读想了解更多 我的博客网站 | 记录思考分享干货 我的个人主页 | 关于我、开源项目