2016-01-10 50 views
-1

我有關於解密字符串的以下信息。它用於線路API。 https://developers.line.me/in_app_web/api-reference#get_token在node.js中使用AES算法解密用於行API的字符串

加密的字符串將使用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 avaialble。任何關於如何在node.js上實現的幫助都會有所幫助。

謝謝

+0

我想這個問題是爲了加密。這個問題是解密。 – Yalamber

回答

1

一般資料:

  1. 一般來說,最好使用CBC模式,ECB模式一般不會推薦/安全模式。 ECB vs CBC模式。

    enter image description here

  2. AES具有128位一個塊的大小,Rijndael算法必須具有指定爲128位是AES的塊大小。

  3. AES可以具有128,192或256位的密鑰大小。

  4. PKCS#7和PKCS#5填充是等效的,應該使用。 mcrypt不支持PKCS填充,因此您必須自己在代碼忽略器中使用mcrypt。

一般來說,你會好起來使用,它支持多種語言的打包解決方案,如RNCryptor /平臺,處理在使加密的安全所需的所有細節。

+0

你好,我需要使用ECB模式,因爲這是API提供者提供的。 – Yalamber

+0

你好,你可以推回去。問題:如果您的信息在使用安全性差的情況下被暴露/被盜,您感覺如何?你正在創建的軟件用戶如何?總的來說,我們需要提高安全性,而不是製造更差的安全性,這是您至少嘗試做出積極改變的機會。 – zaph

+0

你好,我不能控制我必須使用的API。他們來自Line。看這裏。 https://developers.line.me/in_app_web/api-reference#get_token – Yalamber

相關問題