NodeJS之crypto模組公鑰加密及解密

2022-01-20 05:19:06 字數 3536 閱讀 2775

nodejs有以下4個與公鑰加密相關的類。

cipher: 用於加密資料;

decipher: 用於解密資料;

sign: 用於生成簽名;

verify: 用於驗證簽名;

在使用公鑰加密技術時,需要使用公鑰及私鑰:公鑰是用於建立只有私鑰的擁有者能夠讀出的加密資料,以及對私鑰的擁有者的簽名進行驗證;私鑰是用於解密資料以及對資料進行簽名。

一、加密資料

在crypto模組中,cipher類用於對資料進行加密操作;我們可以通過如下兩種方式建立cipher物件;

1、createcipher方法;

該方法使用指定的演算法與密碼來建立cipher物件。該方法使用方式如下:crypto.createcipher(params, pasword);

該方法使用兩個引數,第乙個引數用於指定在加密資料時所使用的演算法,比如 'aes-256-cbc'這些等,第二個引數用於指定加密時所使用的密碼,該引數值必須為乙個二進位制格式的字串或乙個buffer物件。

createcipher 方法返回乙個被建立的cipher物件。

2、createcipheriv方法;

該方法使用指定的演算法、密碼與初始向量、來建立cipher物件,使用方法如下所示:crypto.createcipheriv(params, password, iv);

該方法的第乙個引數是在加密資料時所使用的演算法,比如 'aes-256-cbc'等等,

第二個引數用於指定加密時所使用的密碼,該引數值必須為乙個二進位制格式的字串或乙個buffer物件。

第三個引數指定加密時所使用的初始向量,引數值也必須為乙個二進位制格式的字串或乙個buffer物件。

該方法返回的也是乙個被建立的cipher物件。

3、在上面通過兩種方式建立了cipher物件後,可以通過使用該物件的update方法來指定需要被加密的資料,該方法使用的方式如下:cipher.update(data, [input_encoding], [output_encoding])

其中第乙個引數為必選項(其他的引數為可選項), 該引數值是乙個buffer物件或乙個字串,用於指定需要加密的資料。

第二個引數用於指定被加密的資料所使用的編碼格式,可指定引數值為 'utf-8', 'ascii' 或 'binary',如果不使用第二個引數的話,那麼第乙個引數必須為乙個buffer物件。

第三個引數用於指定輸出加密資料時使用的編碼格式,可指定的引數值為 'hex', 'binary' 或 'base64' 等。如果不使用第三個引數的話,該方法就返回了乙個存放了加密資料的buffer物件。

4、可以使用cipher物件的final方法來返回加密資料。

當該方法被呼叫時,任何cipher物件中所快取的資料都將被加密。在使用了cipher物件的final方法後,不能再向cipher物件中追加加密資料,該方法使用方式如下:cipher.final([output_encoding]);

該方法使用乙個可選引數,該引數值為乙個字串,用於指定在輸出加密資料的編碼格式,可指定引數值為 'hex', 'binary', 及 'base64',如果使用了該引數,那麼final方法返回字串格式的加密資料,如果不使用該引數,那麼該方法就返回乙個buffer物件。

二、解密資料

在crypto模組中,decipher類用於對加密後的資料進行解密操作。

建立乙個decipher物件,可以通過如下兩種方式進行建立:

1、createdecipher方法,該方法使用指定的演算法與密碼來建立 decipher物件,該方法使用的方式如下:crypto.createdecipher(params, password);

在該方法中,第乙個引數用於指定在解密資料時所使用的演算法,比如 'aes-256-cbc'等,該演算法必須與加密資料時所使用的演算法保持一致。

第二個引數用於指定解密時所使用的密碼,其引數值為乙個二進位制格式的字串或乙個buffer物件,該密碼同樣必須與加密該資料時所使用的密碼保持一致。

createdecipher方法返回乙個被建立的 decipher物件。

2、createdecipheriv方法;該方法使用指定的演算法、密碼與初始向量來建立decipher物件。該方法使用如下所示:crypto.createdecipheriv(params, password, iv);

在該方法中,第乙個引數用於指定在解密資料時所使用的演算法,比如 'aes-256-cbc'等,該演算法必須與加密資料時所使用的演算法保持一致。

第二個引數用於指定解密時所使用的密碼,引數值必須為乙個二進位制格式的字串或乙個buffer物件,同樣的道理,該密碼必須與加密該資料時所使用的密碼保持一致。 

第三個引數用於指定解密時所使用的初始向量,該引數值也必須為乙個二進位制格式的字串或者乙個buffer物件,該初始向量必須與加密該資料時所使用的初始向量保持一致。

3、在建立了decipher物件之後,可以通過使用該物件的update方法來指定需要被解密的資料。該方法使用如下所示:decipher.update(data, [input_encoding], [output_encoding]);

在該方法中,第乙個引數為乙個buffer物件或乙個字串,用於指定需要被解密的資料,

第二個引數用於指定被解密資料所使用的編碼格式,可指定的引數值為 'hex', 'binary', 'base64'等,如果不使用第二個引數的話,那麼引數值必須為乙個buffer物件

第三個引數用於指定輸出解密資料時使用的編碼格式,可選引數值為'utf-8', 'ascii' 或 'binary';

4、可以使用decipher物件的final方法來返回經過解密之後的原始資料,該方法使用如下所示:decipher.final([output_encoding]);

在該物件的final方法中,使用了乙個可選引數,引數值為乙個字串,用於指定在輸出解密資料時使用的編碼格式,可指定引數值為 'utf-8', 'ascii' 或 'binary';

如果使用了 該引數,final返回字串格式的解密資料,如果不使用該引數,final方法返回乙個buffer物件。

5、如下加密解密資料的**:

const crypto = require('

crypto');

/*下面是使用加密演算法對 '我很棒' 幾個字進行加密,所加密使用的密碼是 123456

*/const data = '

我很棒'

;const password = '

123456';

//建立加密演算法

const aseencode =function(data, password) ;

console.log(aseencode(data, password));

//輸出加密後字串

//建立解密演算法

const asedecode =function(data, password) ;

console.log(asedecode(aseencode(data, password), password));

//輸出 我很棒

Python入門之 Crypto模組

安裝python apt get install python3.6 安裝pip3 1.首先安裝setuptool wget no check certificate tar zxvf setuptools 19.6.tar.gz cd setuptools 19.6.tar.gz python3 ...

nodejs加密Crypto簡單例子

加密技術通常分為兩大類 對稱式 和 非對稱式 對稱式加密 就是加密和解密使用同乙個金鑰,通常稱之為 session key 這種加密技術在當今被廣泛採用,如美國 所採用的des加密標準就是一種典型的 對稱式 加密法,它的session key長度為56bits。非對稱式加密 就是加密和解密所使用的不...

NodeJs 之模組系統

隨著前端的發展,工程模組兒化已經是必不可少的一部分了,為了讓nodejs的檔案可以相互呼叫,nodejs提供了乙個簡單的模組系統 簡單點說 乙個nodejs檔案就是乙個模組兒 通過 來實踐認識一下,建立乙個模組兒,上邊我們說到乙個nodejs檔案就是乙個模組兒,那麼建立乙個模組兒其實就是建立乙個no...