JS AES加密与PHP解密

简介: 网页端(在没有https情况下)给密码之类的加密传输,虽然多此一举,也好过直接监控软件就能看到密码思路在传输密码的时候,先向后台获取一个随机码或者验证码,作为秘钥,网页端根据这个秘钥,加密要传输的数据,服务端先验证验证码是否正确,如果验证正确,根据验证码进行数据解密 fox.风PHPclass AesJs{ /**向量 * @

网页端(在没有https情况下)给密码之类的加密传输,虽然多此一举,也好过直接监控软件就能看到密码

思路

在传输密码的时候,先向后台获取一个随机码或者验证码,作为秘钥,网页端根据这个秘钥,加密要传输的数据,服务端先验证验证码是否正确,如果验证正确,根据验证码进行数据解密
fox.风

PHP

class AesJs
{
    /**向量
     * @var string
     */
    private static $iv = "1234567890123412";//16位
    /**
     * 默认秘钥
     */
    const KEY = '1111111111111123';//16位

    public static function init($iv = '')
    {
        self::$iv = $iv;
    }

    /**
     * 加密字符串
     * @param string $data 字符串
     * @param string $key  加密key
     * @return string
     */
    public static function encrypt($data = '', $key = self::KEY)
    {
        $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, self::$iv);
        return base64_encode($encrypted);
    }

    /**
     * 解密字符串
     * @param string $data 字符串
     * @param string $key  加密key
     * @return string
     */
    public static function decrypt($data = '', $key = self::KEY)
    {
        $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($data), MCRYPT_MODE_CBC, self::$iv);
        return rtrim($decrypted, "\0");
    }
}

//调用
//加密
AesJs::encrypt('要加密的字符串','秘钥');
//解密
AesJs::decrypt('要解密的字符串','秘钥');

JS

下载地址:
1.https://code.google.com/archive/p/crypto-js/downloads
2.https://github.com/brix/crypto-js/tree/release-3.1.2 (build 目录下)
先加载js文件

<script src="crypto-js/rollups/aes.js" type="text/javascript"></script>
<script src="crypto-js/rollups/md5.js" type="text/javascript"></script>
<script src="crypto-js/components/pad-zeropadding-min.js" type="text/javascript"></script>
/**
 * 加密
 */
function encrypt(str,key) {
    key = CryptoJS.enc.Utf8.parse(key?key:"1111111111111111");// 秘钥
    var iv= CryptoJS.enc.Utf8.parse('1234567890123412');//向量iv
    var encrypted = CryptoJS.AES.encrypt(str, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });
    return encrypted.toString();
}
/**
 * 解密
 * @param str
 */
function decrypt(str) {
    var key = CryptoJS.enc.Utf8.parse("1111111111111111");// 秘钥
    var iv=    CryptoJS.enc.Utf8.parse('1234567890123412');//向量iv
    var decrypted = CryptoJS.AES.decrypt(str,key,{iv:iv,padding:CryptoJS.pad.ZeroPadding});
    return decrypted.toString(CryptoJS.enc.Utf8);
}
//调用
//加密
console.log(encrypt("12345"));
//解密
console.log(decrypt("待解密字符"));

实际使用

JS

//加密部分要改造一下
/**
 * 加密
 */
function encrypt(str,key) {
    key = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(key).toString());//秘钥
    var iv= CryptoJS.enc.Utf8.parse('1234567890123412');//向量iv
    var encrypted = CryptoJS.AES.encrypt(str, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding });
    return encrypted.toString();
}
//验证码 转换成大写
var username=$('#username').val();//获取用户名
var pwd=$('#pwd').val();//获取密码
var verify=$('#verify').val();//获取验证码
verify = verify.toUpperCase();
var json = {username: username, pwd: pwd};//被加密的数据
var aes = encrypt(JSON.stringify(json), verify);//加密
var param = {verify: verify, param: aes};
$.post("/user/login?_=" + new Date().getTime(), param, function (data) {
    if (data) {
    ...
    } else {
    ....
    }
}, "json");

PHP

$verify=input('verify');//验证码
$param=input('param');//加密后数据
//先转换成大写
//然后MD5
$json=AesJs::decrypt($param,md5(strtoupper($verify)));
echo $json;
$arr=json_decode($json,true);
print_r($arr);

来源
http://blog.csdn.net/momo_mutou/article/details/44240371

目录
相关文章
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
791 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
存储 安全 数据安全/隐私保护
浅谈对称加密(AES与DES)
浅谈对称加密(AES与DES)
697 1
|
算法 安全 数据安全/隐私保护
基于AES的遥感图像加密算法matlab仿真
本程序基于MATLAB 2022a实现,采用AES算法对遥感图像进行加密与解密。主要步骤包括:将彩色图像灰度化并重置大小为256×256像素,通过AES的字节替换、行移位、列混合及轮密钥加等操作完成加密,随后进行解密并验证图像质量(如PSNR值)。实验结果展示了原图、加密图和解密图,分析了图像直方图、相关性及熵的变化,确保加密安全性与解密后图像质量。该方法适用于保护遥感图像中的敏感信息,在军事、环境监测等领域具有重要应用价值。
614 35
|
存储 JavaScript 前端开发
在NodeJS中使用npm包进行JS代码的混淆加密
总的来说,使用“javascript-obfuscator”包可以帮助我们在Node.js中轻松地混淆JavaScript代码。通过合理的配置,我们可以使混淆后的代码更难以理解,从而提高代码的保密性。
1454 9
|
JavaScript Java PHP
快速对比:Django、Spring Boot、Node.js 和 PHP
快速对比:Django、Spring Boot、Node.js 和 PHP
1189 7
|
JavaScript 前端开发 安全
js逆向实战之烯牛数据请求参数加密和返回数据解密
【9月更文挑战第20天】在JavaScript逆向工程中,处理烯牛数据的请求参数加密和返回数据解密颇具挑战。本文详细分析了这一过程,包括网络请求监测、代码分析、加密算法推测及解密逻辑研究,并提供了实战步骤,如确定加密入口点、逆向分析算法及模拟加密解密过程。此外,还强调了法律合规性和安全性的重要性,帮助读者合法且安全地进行逆向工程。
611 11
|
存储 安全 数据安全/隐私保护
安全升级!Python AES加密实战,为你的代码加上一层神秘保护罩
【9月更文挑战第12天】在软件开发中,数据安全至关重要。本文将深入探讨如何使用Python中的AES加密技术保护代码免受非法访问和篡改。AES(高级加密标准)因其高效性和灵活性,已成为全球最广泛使用的对称加密算法之一。通过实战演练,我们将展示如何利用pycryptodome库实现AES加密,包括生成密钥、初始化向量(IV)、加密和解密文本数据等步骤。此外,还将介绍密钥管理和IV随机性等安全注意事项。通过本文的学习,你将掌握使用AES加密保护敏感数据的方法,为代码增添坚实的安全屏障。
823 8
|
数据安全/隐私保护
aes之ecb模式的加密解密
aes之ecb模式的加密解密
|
安全 测试技术 Go
Python 和 Go 实现 AES 加密算法的技术详解
Python 和 Go 实现 AES 加密算法的技术详解
1214 0