资讯专栏INFORMATION COLUMN

js使用AES加密PHP使用Openssl解密

shleyZ / 2722人阅读

摘要:最近遇到的几个网站在提交密码时提交的已经是密文,也就是说在网络上传输的密码是密文,这样提升了密码在网络传输中的安全性。今天一起来了解一下基于的前后端加解密流程。由于是块加密,铭文被分割成固定长度的块一般是字节长度,所以也是字节。

最近遇到的几个网站在提交密码时提交的已经是密文,也就是说在网络上传输的密码是密文,这样提升了密码在网络传输中的安全性。

后端语言加解密已经有很成熟的方案了,前端的话Google之前出过一个crypto-js,为浏览器的js提供了加解密方案。今天一起来了解一下基于AES的前后端加解密流程。

Javascript

安装npm包 npm install crypto-js

加密代码

const CryptoJS = require("crypto-js");
const key = CryptoJS.enc.Latin1.parse("1234567812345678");
const iv = CryptoJS.enc.Latin1.parse("1234567812345678");
const encoded = CryptoJS.AES.encrypt("hahaha", key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    adding: CryptoJS.pad.ZeroPadding
}).toString()
console.log("encoded", encoded)

解密代码

const key = CryptoJS.enc.Latin1.parse("123456781234567812345678");
const iv = CryptoJS.enc.Latin1.parse("1234567812345678");
const decoded = CryptoJS.AES.decrypt(encoded, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    adding: CryptoJS.pad.ZeroPadding
}).toString(CryptoJS.enc.Utf8)
console.log("decoded", decoded);

输出如下

encoded 6bcgYd4f4ZgNOQH/3tqMpg==
decoded hahaha

PHP

直接使用openssl解密即可,代码如下:

$encoded = "6bcgYd4f4ZgNOQH/3tqMpg==";
$key  = "123456781234567812345678";
$iv = "1234567812345678";
var_dump(openssl_decrypt($encoded, "AES-192-CBC", $key, 0,$iv));

输出结果:

string(6) "hahaha"

注意事项

AES加密位数跟密钥key有关, 以下是密钥位数和加密对应关系

16 => AES-128

24 => AES-192

32 => AES-256

iv是初始化向量. 超过16字节或者不足16字节都会被补足16字节或者截断到16字节。由于AES是块加密,铭文被分割成固定长度的块(一般是16字节长度),所以iv也是16字节。

CBC是加密模式

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105550.html

相关文章

  • PHP 迁移 Mcrypt 至 OpenSSL 加密算法详解

    摘要:下文中我们将分别使用和来实现加解密,二者同步加解密的要点为使用何种填充算法。下面我们给出填充算法的实现填充算法移去填充算法默认使用自动对待加密数据进行填充以对齐加密算法数据块长度。需固定使用,并通过调整的长度,来实现加密算法。 对称加解密算法中,当前最为安全的是 AES 加密算法(以前应该是是 DES 加密算法),PHP 提供了两个可以用于 AES 加密算法的函数簇:Mcrypt 和 ...

    AlanKeene 评论0 收藏0
  • PHP7.1中AES加密解密方法 mcrypt_module_open()替换方案

    摘要:扩展已经过时了大约年,并且用起来很复杂。因此它被废弃并且被所取代。从起它将被从核心代码中移除并且移到中。手册在迁移页面给出了替代方案就是用取代加密,支持加密要加密的数据加密加密后的数据解密要解密的数据加密解密后的数据可据需求,自行改编。 mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移...

    cheukyin 评论0 收藏0
  • PHPopenssl加密扩展使用小结

    摘要:非对称加密与对称加密相对的是非对称加密,非对称加密的核心思想是使用一对相对的密匙,分为公匙和私匙,私匙自己安全保存,而将公匙公开。 引言 互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求)、数据完整性(没有被人修改过)、数据私密性(密文,无法直接读取)等。虽然现在已经有SSL/TLS协议实现的HTTPS协议,但是因在客户...

    dockerclub 评论0 收藏0
  • php如何openssl_encrypt加密解密

    摘要:密钥长度是位,超过位数密钥被忽略。跨语言做加密解密经常会出现问题,往往是填充方式不对编码不一致或者加密解密模式没有对应上造成。是为了兼容用加密的结果。 最近在对接客户的CRM系统,获取令牌时,要用DES方式加密解密,由于之前没有搞错这种加密方式,经过请教了百度和谷歌两个老师后,结合了多篇文档内容后,终于实现了。 一、DES介绍 DES 是对称性加密里面常见一种,全称为 Data Enc...

    JouyPub 评论0 收藏0
  • 微信小程序加密数据(encryptedData)解密中的PHP代码,php7.1报错

    摘要:问题描述最近在开发微信小程序涉及到加密数据的解密用的是代码在运行后报错提示方法已过时了经研究得知是版本引起的可以使用方法代替解密首先要知道微信方使用的是加密的所以我们采用也应该对应对密文进行解密需要解密的密文解密的初始向量解密得到的明文 问题描述 最近在开发微信小程序涉及到加密数据(encryptedData)的解密,用的是PHP代码,在运行后报错mcrypt_module_ xxx ...

    zebrayoung 评论0 收藏0

发表评论

0条评论

shleyZ

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<