php 和 go 解密 Rijndael256-CBC 加密的数据

php 解密 Rijndael256-CBC (也有认为是 AES-CBC-256) 加密的数据可以使用 phpseclib 库做解密
解密函数:

use phpseclib3\Crypt\Rijndael;

// 需要 composer 安装 "phpseclib/phpseclib": "^3.0"
// Rijndael 解密函数
function rijndael256_decrypt($data, $key, $iv) {
    $rijndael = new Rijndael('cbc');
    $rijndael->setPreferredEngine("PHP");
    $rijndael->setBlockLength(256);
    $rijndael->setKey($key);
    $rijndael->setIV($iv);
    // 需根据加密数据选择是否使用
    $rijndael->disablePadding(); 
    $data = $rijndael->decrypt($data);

    return $data;
}

测试数据:


// 测试函数
function decodeByAes($uid, $str) {
    $data = hex2bin($str);

    $iv = mb_substr($data, 0, 32);
    $key = substr(md5($uid . "xBre2!@348*|AdedFjsDWy01"), 0, 16);

    $data = mb_substr($data, 32);

    $data = rijndael256_decrypt($data, $key, $iv);

    return trim($data);
}

// 测试数据
$uid = "m2Ux0QezsImyNFdtDzYUBWuPf7Ir2AEwJP5l";
$str = "3365616430336134313637303438356562633734666333666136303361343062d9ac29251ae9a36ddb67f8f2ad55eea477239b4d53150feec4a01275d0b1f8b65ffc2f77774eb1203e26050d0f47273b0c35d663da0fa6ddb32b3e0f20cade3204d8f732a74f509c43251c088c523c79c87d02a91cfbc0ca0ff64e8c2e7fb4f6300c584ae84f7de531213747cd3ea50c3f3fa9fc430e784daab2f9777796b0c2";

$data = decodeByAes($uid, $str);
var_dump($data);
// 解密结果: ok ok Request:59ded5eecc800830975a4a1159933981 Hardware:803BB1A8-FFFFA277 License-Type:Demo Multi-Tenant:20 CAL:1000

go 解密 Rijndael256 加密的数据

import "github.com/deatil/go-cryptobin/cryptobin/crypto"

func main() {
    uid := "m2Ux0QezsImyNFdtDzYUBWuPf7Ir2AEwJP5l"
    str := "3365616430336134313637303438356562633734666333666136303361343062d9ac29251ae9a36ddb67f8f2ad55eea477239b4d53150feec4a01275d0b1f8b65ffc2f77774eb1203e26050d0f47273b0c35d663da0fa6ddb32b3e0f20cade3204d8f732a74f509c43251c088c523c79c87d02a91cfbc0ca0ff64e8c2e7fb4f6300c584ae84f7de531213747cd3ea50c3f3fa9fc430e784daab2f9777796b0c2"

    data, _ := hex.DecodeString(str)

    keyOld := uid + "xBre2!@348*|AdedFjsDWy01"

    iv := data[:32]
    data = data[32:]

    keyOldMd5 := md5.Sum([]byte(keyOld))
    key := hex.EncodeToString(keyOldMd5[:])

    cyptde := crypto.FromBytes(data).
        SetKey(key[:16]).
        WithIv(iv).
        Rijndael256().
        CBC().
        // 需根据加密数据选择使用补码方式
        // PKCS7Padding().
        NoPadding().
        Decrypt().
        ToString()
    // 解密结果: ok ok Request:59ded5eecc800830975a4a1159933981 Hardware:803BB1A8-FFFFA277 License-Type:Demo Multi-Tenant:20 CAL:1000
}

go 版本更多对称加密可以查看 文档
以上就是解密 Rijndael256 加密数据的全部内容了

本作品采用《CC 协议》,转载必须注明作者和本文链接
我们走了很远的路,终于发现,路已经不止一条
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!