Nodejs JavaScript 字符串加密

情景

问题的场景是这样的:我们需要在浏览器cookie中存储用户名,但又不想直接明文存储,所以对它进行了简单的加密存储。

因为是简单的加密,目的只是不希望明文存储。我们使用了Base64 编码,使得cookie里的存储不可只读即可。

写入时是加密,读取的时候当然需要解密。Base64 编码的加密解密方法为:

// Base64 编码
var encodedString = btoa("Hello, World!");// Base64 解码
var decodedString = atob(encodedString);

使用 btoa() 函数对字符串进行 Base64 编码,使用 atob() 函数进行解码。如,加密一个字符串:abc,编码后的结果是:YWJj。从这个字符串并不能看出原始字符串是什么,达到了加密的效果。

那么,除了Base64 编码,还有哪些字符串加密方法吗?

字符串加密方法

1. MD5 散列

MD5 是一种常用的散列算法,可以将任意长度的字符串转换为固定长度的哈希值。在 JavaScript 中,可以使用第三方库,如 CryptoJS 来计算 MD5 散列。注意:MD5 已经不推荐用于加密敏感数据,但在某些非安全场景下仍然可以使用。

使用方法为:

// 使用 CryptoJS 计算 MD5 散列
var hash = CryptoJS.MD5("Hello, World!").toString();

2. SHA-256 散列

SHA-256 是一种安全的散列算法,可以将任意长度的数据转换为固定长度的哈希值。在 JavaScript 中,可以使用第三方库,如 CryptoJS 来计算 SHA-256 散列。使用方法为:

// 使用 CryptoJS 计算 SHA-256 散列
var hash = CryptoJS.SHA256("Hello, World!").toString();

3. AES 加密

AES(Advanced Encryption Standard)是一种常用的对称加密算法,能够对数据进行加密和解密。在 JavaScript 中,可以使用第三方库,如 CryptoJS 来进行 AES 加密。AES加密和解密的使用方法为:

// 使用 CryptoJS 进行 AES 加密
var encrypted = CryptoJS.AES.encrypt("Hello, World!", "SecretKey123").toString();// 使用 CryptoJS 进行 AES 解密
var decrypted = CryptoJS.AES.decrypt(encrypted, "SecretKey123").toString(CryptoJS.enc.Utf8);

从上述可以看出,除了Base64编码外,在JavaScript中对字符串进行加密都可以使用CryptoJS库进行,它封装了JavaScript的另外三种加密方法。

但是,需要注意的是:这些只适用于一些简单的加密,在真正需要对敏感数据进行加密时,应该使用专门的加密库或工具,并遵循最佳实践以确保数据的安全性

字符串加密方法比较

虽然上述几种方法都可以对字符串进行加密,但是每种加密方法的用途和适用场景不同。下面对这几种方法进行比较:

1. Base64 编码:

Base64 编码是一种简单的编码方式,将字符串转换为可打印的 ASCII 字符。它并不是真正的加密算法,只是一种编码方法,可以用于在数据传输过程中隐藏数据或将二进制数据转换为字符串形式。Base64 编码后的数据可以轻松解码回原始字符串。

  • 优点:简单易用、编码解码方便。
  • 缺点:不提供真正的加密功能,编码后的数据仍然可以被解码。

2. 散列算法(如 MD5、SHA-256):

散列算法将任意长度的字符串转换为固定长度的哈希值,不可逆转。它通常用于验证数据完整性或作为密码存储的一种方式,但不适合用作加密敏感数据。

  • 优点:快速计算、不可逆、适用于验证数据完整性。
  • 缺点:不可逆,无法还原原始数据。

3. 对称加密算法(如 AES)

对称加密算法使用相同的密钥进行加密和解密,是一种常见的加密方法。它可以对数据进行强加密,但在加密和解密过程中需要确保密钥的安全性。

  • 优点:强加密、加密解密速度快。
  • 缺点:需要安全地管理密钥。

4. 非对称加密算法(如 RSA):

非对称加密算法使用一对密钥,即公钥和私钥。公钥用于加密数据,私钥用于解密数据。非对称加密通常用于安全通信和数字签名,但在处理大量数据时速度较慢。

  • 优点:安全、可用于安全通信和数字签名。
  • 缺点:加密解密速度慢。

结论

选择适当的加密方法取决于你的具体需求和安全要求:

  • 如果只是隐藏数据或进行简单的转换,Base64 编码足够。
  • 如果需要对数据进行强加密,对称加密算法如 AES 是一个不错的选择。
  • 对于安全通信和数字签名,非对称加密算法如 RSA 是更好的选择。

所以,请根据具体情况选择合适的加密方法,并确保遵循最佳实践来保护数据的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/161479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arthas 监听 Docker 部署的java项目CPU占比高的信息

1、Linux上安装Arthas wget https://alibaba.github.io/arthas/arthas-boot.jar2、docker ps 查看目标项目的容器ID 3、copy Arthas 到目标容器中 (注意有 😕 ) docker cp arthas-boot.jar d97e8666666:/4、进入到目标容器目录中 docker exec -it d97e8666666 /b…

5-7求三种数的和

#include<stdio.h> int main(){double sum10;double sum20;double sum30;double sum;int i;for(i1;i<100;i){sum1sum1i;}printf("sum1结果是&#xff1a;%15.6f\n",sum1);for(i1;i<50;i){sum2sum2i*i;}printf("sum2结果是&#xff1a;%15.6f\n"…

TS是什么、为什么、怎么办

TS是什么 javascript程序的静态类型检查器 为什么要用TS js编写时在预期不同类型值的地方使用了某种类型的值&#xff0c;导致常见的类型错误 js只能提供动态类型&#xff0c;也就是运行一下代码才能知道发生了什么&#xff0c;需要静态类型的检查 TS怎么用 1、安装vscode…

连接服务器的脚本

对于记不住的服务器密码且不愿用三方工具俺简单写了个脚本&#xff08;检测下最近shell脚本的学习效果咋样&#xff09; expect 是处理交互的一种脚本语言&#xff0c;spawn启动指定进程 -> expect获取指定关键字 -> send想指定进程发送指定指令 -> 执行完成后退出 sp…

Oracle:poor sql导致的latch: cache buffers chains案例

巡检时&#xff0c;执行如下sql发现长会话&#xff1a; SELECT SE.SID,SE.SERIAL#,TO_CHAR(LOGON_TIME,YYYY-MM-DD HH24:MI:SS),SE.STATUS,SE.OSUSER,SE.MACHINE,SE.PROGRAM,SE.BLOCKING_SESSION, SE.SQL_ID,SE.PREV_SQL_ID ,SE.EVENT,SE.P1TEXT,SE.P1,SE.P2TEXT,SE.P2,SE.P3…

LeetCode1161. Maximum Level Sum of a Binary Tree

文章目录 一、题目二、题解 一、题目 Given the root of a binary tree, the level of its root is 1, the level of its children is 2, and so on. Return the smallest level x such that the sum of all the values of nodes at level x is maximal. Example 1: Input:…

visionOS空间计算实战开发教程Day 4 初识ImmersiveSpace

细心的读者会发现在在​​Day1​​​和​​Day2​​​的示例中我们使用的都是​​WindowGroup​​。 main struct visionOSDemoApp: App {var body: some Scene {WindowGroup {ContentView()}} } 本节我们来认识在visionOS开发中会经常用到的另一个概念​​ImmersiveSpace​​…

Spark---集群搭建

Standalone集群搭建与Spark on Yarn配置 1、Standalone Standalone集群是Spark自带的资源调度框架&#xff0c;支持分布式搭建&#xff0c;这里建议搭建Standalone节点数为3台&#xff0c;1台master节点&#xff0c;2台worker节点&#xff0c;这虚拟机中每台节点的内存至少给…

transformer之KV Cache

一、为什么要研究KV Cache 非常有效的加速推理速度&#xff0c;效果如下所示&#xff1a; import numpy as np import time import torch from transformers import AutoModelForCausalLM, AutoTokenizer NAME_OR_PATH r*************** device "cuda" if torch.cu…

中职组网络安全 Server-Hun-1.img Server-Hun-2.img

一串密码 smbuser用户和密码登录ssh还是失败提示需要密钥&#xff0c;尝试ftp登录成功 发现密钥存放在.ssh/下&#xff0c;在kali上生成一个密钥&#xff0c;通过上传到.ssh/下&#xff0c;将其替换掉 使用kali生成密钥 登录成功,但是无法拿到root目录下的flag 获取root用户权限…

电子学会C/C++编程等级考试2022年12月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:加一 输入一个整数x,输出这个整数加1后的值,即x+1的值。 时间限制:1000 内存限制:65536输入 一个整数x(0 ≤ x ≤ 1000)。输出 按题目要求输出一个整数。样例输入 9样例输出 10 答案: //参考答案: #include<bits/st…

opencv-常用代码

以下是一些OpenCV中常用的代码片段&#xff0c;涵盖了一些基本的图像处理和计算机视觉任务。 加载和显示图像: import cv2# 读取图像 img cv2.imread(image.jpg)# 显示图像 cv2.imshow(Image, img) cv2.waitKey(0) cv2.destroyAllWindows()调整图像大小: resized_img cv2.res…

鸿蒙4.0开发笔记之DevEco Studio页面操作router的pushUrl页面跳转与back返回上一页(五)

一、认识组件 关于HarmonyOS中ArkTS的基础组件请参见文章鸿蒙4.0开发笔记之ArkTs语言基础与基本组件结构&#xff08;四&#xff09; 二、实现页面跳转pushUrl 1、操作说明 实现页面跳转的核心便是router.pushUrl的调用&#xff0c;操作起来也很简单&#xff0c;总共就四步…

Laravel 安装(笔记一)

目录 第一步、Laravel 一般使用 composer安装 第二步、使用composer安装项目 第三步、配置环境 第四步、访问域名&#xff0c;安装完成 Laravel 官网 l​​​​​​​Installation - Laravel 中文网 为 Web 工匠创造的 PHP 框架 第一步、Laravel 一般使用 composer安装 如…

13.求面积[有问题]

#include<stdio.h> #include<math.h> #include<bits/stdc.h> using namespace std;void fun(double a,b,c) {double p,c;p (abc)/2;c sqrt(p*(p-a)*(p-b)*(p-c));printf("面积是&#xff1a;%lf",c); }int main(){double a,b,c;scanf("%lf,%…

《golang设计模式》第三部分·行为型模式-06-备忘录模式(Memento)

文章目录 1. 概述1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 备忘录&#xff08;Memento&#xff09;用于在不破坏目标对象封装特性的基础上&#xff0c;将目标对象内部的状态存储到外部对象中&#xff0c;以备之后恢复状态时使用。 1.1 角色 Originato…

【洛谷 B2008】计算 (a+b)×c 的值 题解(顺序结构+四则运算)

计算 (ab)c 的值 题目描述 给定 3 3 3 个整数 a , b , c a,b,c a,b,c&#xff0c;计算表达式 ( a b ) c (ab) \times c (ab)c 的值。 输入格式 输入仅一行&#xff0c;包括三个整数 a , b , c a,b,c a,b,c&#xff0c;数与数之间以一个空格分开。 输出格式 输出一行…

如何访问linux上的web服务

1.获取服务运行端口 例如8080 2.如果时vmware 需要先配置转发端口和主机ip 主机ip需要未使用的 例如&#xff1a; 3.查看虚拟机防火墙设置 centos8 为例 &#xff1a; firewall-cmd --zonepublic --list-ports 查看放通端口 如果没有放通 firewall-cmd --zonepublic --add-p…

04 if进阶

elif 否则如果 如果条件没有满足 会继续进入“否则如果”里面判断 只要满足一个条件 条件判断立即终止 chinese 100 if chinese 100:print("我们去迪士尼玩")elif chinese > 90:print("我们去朱雀森林公园")else:print("回家写作业")if n…

GO MySQL数据库操作封装

Go 语言操作数据库, 数据库连接封装&#xff1a; package Test_dbimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log""sync" )var (DB *sql.DBpoolOnce sync.Once )func NewConnection() (*sql.…