NodeJS中的Rijndael 256 CBC PKCS7加密/解密

时间:2019-02-12 12:13:16

标签: node.js rijndael

我正在为服务构建NodeJS客户端,该客户端使用256位块Rijndael CBC和PKCS7填充来加密数据。

我已经看过NodeJS中的Rijndael几个实现,但是似乎没有一个可以提供我想要的组合。

任何建议如何在NodeJS中实现?

1 个答案:

答案 0 :(得分:1)

我将在此处发布解决方案,以便日后有人遇到相同问题时找到。

通过结合使用NPM注册表中可用的两个模块<?php $url='http://myurl.com/'; $curl = curl_init(); curl_setopt($curl,CURLOPT_URL, $url); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); $html = curl_exec($curl); ; $pro=array(); preg_match_all("/<td>[0-9]{1,3}(\.[0-9]{3})*.[0-9]+DA<\/td>",$html,$match); $pro['prix']=$match['0']; preg_match_all('!<td><a href=".*">\K(.+?(?=<\/a><\/td>))!',$html,$match); $pro['nom']=$match['0']; $currencies = array_combine($pro['nom'], array_chunk($pro['prix'], 2)); foreach ($currencies as $currency => list($sell, $buy)) { $output = ' <td data-th="currency">'.$currency.'</td> <td data-th="sellprice">'.$sell.'</td> <td data-th="buyprice">'.$buy.'</td> '; } curl_close($curl); ?> <table class="rwd-table"> <tr> <th>Devises</th> <th>Achat</th> <th>Vente</th> </tr> <?php echo $output ?> </table> rijndael-js,使用Rijndael 256块大小和PKCS7填充进行加密/解密实际上非常容易。

pkcs7-padding模块允许您使用各种块大小(128、256和192个块大小)进行加密/解密-但是,它仅支持零填充。不提供PKCS7填充支持。因此,您要么需要依赖另一个模块来进行PKCS7填充,要么自己动手(也不是那么困难)。

如果

rijndael-js的长度不是块大小的倍数,则只会对纯文本(要加密的数据)进行零填充。为防止数据零填充,必须先填充明文,然后再对其进行加密。在下面的示例中,我为此使用了npm的rijndael-js模块。

pkcs7-padding

这是加密数据的方式

nmp install rijndael-js pkcs7-padding --save

这是解密数据的方法

const Rijndael = require('rijndael');
const padder = require('pkcs7-padding');
const crypto = require('crypto');

const plainText = Buffer.from('Here is my plain text', 'utf8');
//Pad plaintext before encryption
const padded = padder.pad(plainText, 32); //Use 32 = 256 bits block sizes

const key = crypto.randomBytes(32); //32 bytes key length
const iv = crypto.randomBytes(32); //32 bytes IV

const cipher = new Rijndael(key, 'cbc'); //CBC mode
const encrypted = cipher.encrypt(padded, 256, iv);