AES加密演算法

2022-04-08 08:42:55 字數 4641 閱讀 4586

aes對稱加密演算法下有好多種演算法,往往很難做到垮語言的加密解密,本文提供一套c#和node.js可以相互加密解密通用的**之aes-256-cbc演算法:

1、aes所有的鑰匙必須 128位(16位元組),192位(24位元組)或256位(32位元組)長

2、有幾種操作模式,每個都有不同的優點和缺點。一般來說,建議用cbc和ctr模式。不推薦ecb(據說完整性不好)

aes-256-cbc c#**

using system.security.cryptography;

public

class

aes ;

//////

aes加密

/// ///

要加密的字元

///對應的金鑰(不可為中文,不能超過32個字元,超過32個字元的擷取前32個字元)

///返回base64格式的字串

public

static

string encode(string encryptstring, string

encryptkey)

if (string

.isnullorempty(encryptkey))

if(encryptkey.length > 32

) encryptkey = stringutility.cutstring(encryptkey, 0, 32

);

if (encryptkey.length < 32

) encryptkey = encryptkey.padright(32, '0'

); rijndaelmanaged rijndaelprovider = new

rijndaelmanaged();

rijndaelprovider.key =encoding.utf8.getbytes(encryptkey);

rijndaelprovider.iv =_vector;

rijndaelprovider.padding = paddingmode.pkcs7; //

填充模式

icryptotransform rijndaelencrypt =rijndaelprovider.createencryptor();

byte inputdata =encoding.utf8.getbytes(encryptstring);

byte encrypteddata = rijndaelencrypt.transformfinalblock(inputdata, 0

, inputdata.length);

return

convert.tobase64string(encrypteddata);

}//////

aes解密

/// ///

要解密的字元(該字元必須是已經加密過的base64格式的字串)

///解密的金鑰,該金鑰要和加密的金鑰一致(不可為中文,不能超過32個字元,超過32個字元的擷取前32個字元)

///解密後的字串

public

static

string decode(string decryptstring, string

decryptkey)

if (string

.isnullorempty(decryptkey))

if (decryptkey.length > 32

) decryptkey = stringutility.cutstring(decryptkey, 0, 32

);

if (decryptkey.length < 32

) decryptkey = decryptkey.padright(32, '0'

); rijndaelmanaged rijndaelprovider = new

rijndaelmanaged();

rijndaelprovider.key =encoding.utf8.getbytes(decryptkey);

rijndaelprovider.iv =_vector;

rijndaelprovider.padding = paddingmode.pkcs7; //

填充模式

icryptotransform rijndaeldecrypt =rijndaelprovider.createdecryptor();

byte inputdata =convert.frombase64string(decryptstring);

byte decrypteddata = rijndaeldecrypt.transformfinalblock(inputdata, 0

, inputdata.length);

return

encoding.utf8.getstring(decrypteddata);

}catch

}public

static

string decode(string decryptstring, string decryptkey, byte

my_vector)

if (string

.isnullorempty(decryptkey))

if (decryptkey.length > 32

) decryptkey = stringutility.cutstring(decryptkey, 0, 32

);

if (decryptkey.length < 32

) decryptkey = decryptkey.padright(32, '0'

); rijndaelmanaged rijndaelprovider = new

rijndaelmanaged();

rijndaelprovider.key =encoding.utf8.getbytes(decryptkey);

rijndaelprovider.iv =_vector;

rijndaelprovider.padding = paddingmode.pkcs7; //

填充模式

icryptotransform rijndaeldecrypt =rijndaelprovider.createdecryptor();

byte inputdata =convert.frombase64string(decryptstring);

byte decrypteddata = rijndaeldecrypt.transformfinalblock(inputdata, 0

, inputdata.length);

string uid =encoding.utf8.getstring(decrypteddata);

guid id =guid.empty;

if (guid.tryparse(uid, out id)) //

當前token解成功了

else

}catch}}

aes-256-cbc node.js演算法

var crypto = require('crypto');/**

* 加密方法

* @param key 加密key

* @param iv 向量

* @param data 需要加密的資料

* @returns string */

var encrypt = function

(key, iv, data) ;/**

* 解密方法

* @param key 解密的key

* @param iv 向量

* @param crypted 密文

* @returns string */

var decrypt = function

(key, iv, crypted) ;

var key = '[email protected]';

console.log('加密的key:', key.tostring('hex'));

var iv = 'areyounysnowman?';

console.log('加密的iv:', iv);

var data = "5c3bb4fe-2fcc-49b7-b58a-10520a8a0fb2";

console.log("需要加密的資料:", data);

var crypted =encrypt(key, iv, data);

console.log("資料加密後:", crypted);

var dec =decrypt(key, iv, crypted);

console.log("資料解密後:", dec);

AES加密演算法

aes加密演算法 加密模式 ecb模式 優點 1.簡單 2.有利於平行計算 3.誤差不會被傳送 缺點 1.不能隱藏明文的模式 2.可能對明文進行主動攻擊 cbc模式 優點 1.不容易主動攻擊,安全性好於ecb,適合傳輸長度長的報文,是ssl ipsec的標準。缺點 1.不利於平行計算 2.誤差傳遞 ...

AES加密演算法

aes的基本要求是 比三重des快 至少與三重des一樣安全 資料分組長度為128 bit 金鑰長度為128 192 256 bit,對應於金鑰的不同長度,加密輪的次數也不盡相同。選定rijndael演算法為新的aes演算法。演算法的原型是square演算法,其設計策略為寬軌跡策略 針對差分分析和線...

AES加密演算法 C

先搞定aes演算法,基本變換包括subbytes 位元組替代 shiftrows 行移位 mixcolumns 列混淆 addroundkey 輪金鑰加 其演算法一般描述為 明文及金鑰的組織排列方式 bytesubstitution 位元組替代 非線性的位元組替代,單獨處理每個位元組 求該位元組在有...