小程序AES加密、解密

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小程序AES加密、解密相关的知识,希望对你有一定的参考价值。

参考技术A npm install  crypto-js

import CryptoJS from 'crypto-js'

// 定义加/解密的 key

const initKey = 'Test-AES-CBC-128';

// 设置数据块长度

const keySize = 128;

//设置向量和服务端保持一致

const iv = "0abcdefghij7twhjm";

export const aesEncrypt = (data, key) =>

  /**

  * CipherOption, 加密的一些选项:

  * mode: 加密模式, 可取值(CBC, CFB, CTR, CTRGladman, OFB, ECB), 都在 CryptoJS.mode 对象下

  * padding: 填充方式, 可取值(Pkcs7, AnsiX923, Iso10126, Iso97971, ZeroPadding, NoPadding), 都在 CryptoJS.pad 对象下

  * iv: 偏移量, mode === ECB 时, 不需要 iv

  * 返回的是一个加密对象

  */

  const cipher = CryptoJS.AES.encrypt(data, key,

    mode: CryptoJS.mode.CBC,

    padding: CryptoJS.pad.Pkcs7,

    iv: CryptoJS.enc.Utf8.parse(iv)

  );

// 将加密后的数据转换成 Base64

  const base64Cipher = cipher.ciphertext.toString(CryptoJS.enc.Base64); //CryptoJS.enc.Base64

  console.log('base64Cipher', base64Cipher)

// 处理 android 某些低版的BUG

//    const resultCipher = base64Cipher.replace('//+/g,\'-\'').replace(g,'_');

// 返回加密后的经过处理的 Base64

  return base64Cipher;



/**

* 解密函数

* @param string encrypted - 加密的数据;

* @param string key - 加密使用的 key

*/

export const aesDecrypt = (encrypted, key) =>

// 先将 Base64 还原一下, 因为加密的时候做了一些字符的替换

//      const restoreBase64 = encrypted.replace().replace(/_/g,'/');

// 这里 mode, padding, iv 一定要跟加密的时候完全一样

// 返回的是一个解密后的对象

  const decipher = CryptoJS.AES.decrypt(encrypted, key,

    mode: CryptoJS.mode.CBC,

    padding: CryptoJS.pad.Pkcs7,

    iv: CryptoJS.enc.Utf8.parse(iv)

  );

// 将解密对象转换成 UTF8 的字符串

  const resultDecipher = CryptoJS.enc.Utf8.stringify(decipher);

// 返回解密结果

  return resultDecipher;

php AES cbc模式 pkcs7 128位加密解密(微信小程序)

PHP AES CBC模式PKCS7 128位加密

加密:

        $key = ‘1234567812345678‘;
        $iv = ‘1234567890123456‘; 
        $message = ‘123456‘;
        $blocksize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
        $len = strlen($message); //取得字符串长度
        $pad = $blocksize - ($len % $blocksize); //取得补码的长度
        $message .= str_repeat(chr($pad), $pad); //用ASCII码为补码长度的字符, 补足最后一段
        $xcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $message, MCRYPT_MODE_CBC, $iv);

PHP AES CBC模式PKCS7 128位解密

解密:

public function stripPkcs7Padding($string) {
        $slast = ord(substr($string, -1));
        $slastc = chr($slast);
        $pcheck = substr($string, -$slast);
 
        if (preg_match("/$slastc{" . $slast . "}/", $string)) {
            $string = substr($string, 0, strlen($string) - $slast);
            return $string;
        } else {
            return false;
        }
    }
 
stripPkcs7Padding(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $xcrypt, MCRYPT_MODE_CBC, $iv))

 

 

 

 http://php.net/manual/zh/function.mcrypt-encrypt.php

 

转: https://blog.csdn.net/u011650048/article/details/50846124

 

以上是关于小程序AES加密、解密的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序AES加密解密

-41003: aes 小程序加密数据解密失败问题

aes加密

小程序登录的AES加密解释

微信小程序--AES加密解密 ----ECS,Pkcs7,Hex,Utf8

使用 AES 加密/解密