本站停止维护,已转移至laravel学习网;欢迎大家移步访问!

JS使用AES加密与PHP解密实现数据对接

有些时候我们需要前后端分离,比如webapp,为了数据安全,我们考虑到AES对称加密,我找了好久也没找到合适的,今天找到了,来汇总一下:

一. PHP端

class AseService
{
    /**向量
     * @var string
     */
    private static $iv = "1234567890123412";//16位
    /**
     * 默认秘钥
     */
    const KEY = 'FPg9LRkHTr5sEWNR';//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('要加密的字符串','FPg9LRkHTr5sEWNR');
//解密
AesJs::decrypt('要解密的字符串','FPg9LRkHTr5sEWNR');

二. 前端(js端)

首先,我们需要下载js加密包,下载后需要引入

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

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>加解密时仅需要秘钥</title>
</head>
<body>
    <script src="cryptojs/rollups/aes.js" type="text/javascript"></script>
    <script src="cryptojs/rollups/md5.js" type="text/javascript"></script>
    <script src="cryptojs/components/pad-zeropadding-min.js" type="text/javascript"></script>
    <script>
        /**
         * 加密
         */
        function encrypt(str,key) {
            key = CryptoJS.enc.Utf8.parse("FPg9LRkHTr5sEWNR");// 秘钥
            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("FPg9LRkHTr5sEWNR");// 秘钥
            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("解密的字符串"));
    </script>
</body>
</html>


转载请注明 :一沙网络原文出处:http://bbs.earnp.com/article/346
问题交流群 :562864481
0
打赏
发布时间 :2017-03-10 15:36:56
分享

0 个评论

    还没有评论,感觉来抢沙发吧!

要回复文章请先登录注册