【问题标题】:Decrypting a string using AES algorithm in node.js for line API在 node.js 中使用 AES 算法为 line API 解密字符串
【发布时间】:2016-01-10 21:15:37
【问题描述】:

我有以下关于解密字符串的信息。它用于线路 API。 https://developers.line.me/in_app_web/api-reference#get_token

加密的字符串将使用 Channel Secret 作为对称密钥进行解码。使用的算法是AES,块大小是128位,加密模式是ECB,填充是PKCS#5。 Channel Secret 字符串将被解释为十六进制字节字符串并用作对称密钥。加密后的字符串遵循Base64编码,解码后恢复。

它还提供了 java、ruby 和 php 的示例。我正在尝试在 node.js 上实现这一点,但我对所有术语以及如何在 node.js 上实现这一点感到完全困惑。

Ruby 实现

source = ... # encrypted string
cipher = OpenSSL::Cipher::Cipher.new('AES-128-ECB')
cipher.decrypt
cipher.key = ['YOUR_CHANNEL_SECRET'].pack('H*')
decoded = Base64.decode64(source)
decrypted = cipher.update(decoded) + cipher.final

php实现

$source = ...; // encrypted string
$secretKey = pack('H*', "YOUR_CHANNEL_SECRET");
$decoded = base64_decode($source);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $secretKey, $decoded, MCRYPT_MODE_ECB);

所以这里我们有源和 YOUR_CHANNEL_SECRET 可用。有关如何在 node.js 上实现此功能的任何帮助都会有所帮助。

谢谢

【问题讨论】:

  • 我猜这个问题是关于加密的。本题用于解密。

标签: javascript node.js encryption line-api


【解决方案1】:

一般信息:

  1. 一般情况下最好使用CBC模式,ECB模式一般不是推荐/安全模式。 ECB vs CBC 模式。

  2. AES 有一个 128 位的块大小,Rijndael 必须具有指定为 128 位的块大小才能成为 AES。

  3. AES 可以有 128、192 或 256 位的密钥大小。

  4. PKCS#7 和 PKCS#5 填充是等效的,应该使用。 mcrypt 不支持 PKCS 填充,因此您必须自己在代码忽略器中执行此操作才能使用 mcrypt。

一般而言,您最好使用打包解决方案,例如 RNCryptor,它支持多种语言/平台,处理确保加密安全所需的所有细节。

【讨论】:

  • 您好,我需要使用 ECB 模式,因为这是 API 提供商提供的。
  • 您好,您可以推回。问题:当您的信息在使用低安全性的情况下被暴露/被盗时,您有什么感受?您正在创建的软件的用户如何?总的来说,我们需要提高安全性,而不是制造更差的安全性,这是您至少尝试产生积极影响的机会。
  • 您好,我无法控制必须使用的 API。他们来自 Line。看这里。 developers.line.me/in_app_web/api-reference#get_token
  • 我也建议avoiding RNCryptor
猜你喜欢
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多