node.js - 加密 des-ede3-cbc nodejs
问题描述
我正在尝试使用 des-ede3-cbc 算法加密字符串
我的 base64 密码是sq7HjrUOBfKmC576ILgskD5srU870gJ7
,我要加密的消息是06080232580
我应该得到的十六进制结果是a5334014a4f010c8779cef789886c123
第一次尝试
const iv = Buffer.alloc(8);
const cipher = crypto.createCipheriv('des-ede3-cbc', Buffer.from('sq7HjrUOBfKmC576ILgskD5srU870gJ7', 'base64'), iv);
let ciph = cipher.update('06080232580', 'utf8', 'hex');
ciph += cipher.final('hex');
console.log(ciph);
结果是a5334014a4f010c8300101ae242354de
另一个测试
let shortkey = Buffer.from('06080232580', 'utf8');
let key = Buffer.alloc(24);
key.fill('\0');
for (i = 0; i < shortkey.length; i++) {
key[i] = shortkey[i];
}
let IV = Buffer.alloc(8);
const cipher = crypto.createCipheriv('des-ede3-cbc', key, IV);
password = Buffer.from('sq7HjrUOBfKmC576ILgskD5srU870gJ7', 'base64');
let encryptedArr = [cipher.update(password)];
encryptedArr.push(cipher.final());
encrypted = Buffer.concat(encryptedArr);
console.log(encrypted.toString('hex'));
结果是6f6b59b6c3ea45592bedbd86db4f31cc5da23d85e2ff773940aaa39e2efdc4ae
Y 有我的旧代码在 php 中工作
<?php
$message = "06080232580";
$key = base64_decode("sq7HjrUOBfKmC576ILgskD5srU870gJ7");
$l = ceil(strlen($message) / 8) * 8;
$message = $message.str_repeat("\0", $l - strlen($message));
$result = substr(openssl_encrypt($message, 'des-ede3-cbc', $key, OPENSSL_RAW_DATA, "\0\0\0\0\0\0\0\0"), 0, $l);
echo implode(unpack("H*", $result));
结果标识a5334014a4f010c8779cef789886c123
解决方案
找到了解决方案
let shortkey = Buffer.from('06080232580', 'utf8');
let key = Buffer.alloc(16);
key.fill('\0');
for (i = 0; i < shortkey.length; i++) {
key[i] = shortkey[i];
}
let IV = Buffer.alloc(8);
const password = Buffer.from('sq7HjrUOBfKmC576ILgskD5srU870gJ7', 'base64');
const cipher = crypto.createCipheriv('des-ede3-cbc', password, IV);
cipher.setAutoPadding(false)
let encryptedArr = [cipher.update(key)];
encryptedArr.push(cipher.final());
encrypted = Buffer.concat(encryptedArr);
console.log(encrypted.toString('hex'));
推荐阅读
- php - 即使我使用 HTTP(不断加载),Chrome 也不会打开我由 XAMPP 托管的 PHP 文件
- serenity-bdd - 我无法将自定义字段添加到 Serenity 报告(使用最新版本)
- kotlin - Kotlin 协程:如何将数组通道与过滤器/映射一起使用?
- java - 通用 MergeSort Java 实现堆栈溢出错误
- arrays - 打字稿:未捕获的类型错误,无法读取未定义的属性“推送”
- html - 将图像添加到 HTML 电子邮件
- twilio - 使用 npm twilio 包时如何在 WhatsApp 中实现打字指示器
- python - 根据索引从 Python 列表中过滤值
- html - Angular 6 中的自定义组件:布尔属性的值
- java - 如何在scrollView.setOnScrollChangeListener中获取scrollY的最大值