173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

aes加密js

keros@mark 2022-10-28 资讯中心

很高兴和大家一起分享aes加密js的知识,希望对各位有所帮助。

本文目录一览

如何使用CryptoJS的aes方法进行加密和解密

首先准备一份明文和秘钥:

var plaintText = 'aaaaaaaaaaaaaaaa'; // 明文

var keyStr = 'bbbbbbbbbbbbbbbb'; // 一般key为一个字符串

参看官网文档,aes方法是支持aes-128、aes-192和aes-256的,加密过程中使用哪种加密方式取决于传入key的类型,否则就会按照aes-256的方式加密。

CryptoJS supports aes-128, aes-192, and aes-256. It will pick the variant by the size of the key you pass in. If you use a passphrase, then it will generate a 256-bit key.

由于Java就是按照128bit给的,但是由于是一个字符串,需要先在前端将其转为128bit的才行。

最开始以为使用CryptoJS.enc.Hex.parse就可以正确地将其转为128bit的key。但是不然...

经过多次尝试,需要使用CryptoJS.enc.Utf8.parse方法才可以将key转为128bit的。好吧,既然说了是多次尝试,那么就不知道原因了,后期再对其进行更深入的研究。

// 字符串类型的key用之前需要用uft8先parse一下才能用

var key = CryptoJS.enc.Utf8.parse(keyStr);

由于后端使用的是PKCS5Padding,但是在使用CryptoJS的时候发现根本没有这个偏移,查询后发现PKCS5Padding和PKCS7Padding是一样的东东,使用时默认就是按照PKCS7Padding进行偏移的。

// 加密

var encryptedData = CryptoJS.aes.encrypt(plaintText, key, {

mode: CryptoJS.mode.ECB,

padding: CryptoJS.pad.Pkcs7

});

由于CryptoJS生成的密文是一个对象,如果直接将其转为字符串是一个Base64编码过的,在encryptedData.ciphertext上的属性转为字符串才是后端需要的格式。

var encryptedBase64Str = encryptedData.toString();

// 输出:'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='

console.log(encryptedBase64Str);

// 需要读取encryptedData上的ciphertext.toString()才能拿到跟Java一样的密文

var encryptedStr = encryptedData.ciphertext.toString();

// 输出:'44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'

console.log(encryptedStr);

由于加密后的密文为128位的字符串,那么解密时,需要将其转为Base64编码的格式。

那么就需要先使用方法CryptoJS.enc.Hex.parse转为十六进制,再使用CryptoJS.enc.Base64.stringify将其变为Base64编码的字符串,此时才可以传入CryptoJS.aes.decrypt方法中对其进行解密。

// 拿到字符串类型的密文需要先将其用Hex方法parse一下

var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);

// 将密文转为Base64的字符串

// 只有Base64类型的字符串密文才能对其进行解密

var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);

使用转为Base64编码后的字符串即可传入CryptoJS.aes.decrypt方法中进行解密操作。

// 解密

var decryptedData = CryptoJS.aes.decrypt(encryptedBase64Str, key, {

mode: CryptoJS.mode.ECB,

padding: CryptoJS.pad.Pkcs7

});

经过CryptoJS解密后,依然是一个对象,将其变成明文就需要按照Utf8格式转为字符串。

// 解密后,需要按照Utf8的方式将明文转位字符串

var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);

console.log(decryptedStr); // 'aaaaaaaaaaaaaaaa'

前端JS aes加密 后端PHP aes加解密

!DOCTYPEhtml

html

head

    titleaes demo/title

/head

body

    script type="text/javascript" src="./CryptoJS/aes.js"/script

    script type="text/javascript" src="./CryptoJS/pad-zeropadding.js"/script

    script type="text/javascript"

    text = 'did=12345dgversion=1';

    var key = '123454536f667445454d537973576562';

    key = CryptoJS.enc.Utf8.parse(key);

    var iv = "1234577290ABCDEF1264147890ACAE45";

    iv = CryptoJS.enc.Utf8.parse(iv);

    var encrypted = CryptoJS.aes.encrypt(text, key, {

        iv: iv,

        mode: CryptoJS.mode.CBC,

        padding: CryptoJS.pad.ZeroPadding

    }).toString()

    document.write(encrypted);

    /script

/body

/html

后端

public function encrypt2($input = ''){

        $pk = "123454536f667445454d537973576562";

        $iv = substr("1234577290ABCDEF1264147890ACAE45", 0, 16);

        // $t = 'T10515';

        $encrypted = ( mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $pk, $input, MCRYPT_MODE_CBC,$iv) );

        return base64_encode($encrypted);

    } 

    public function decrypt2($encrypted){

        $pk = "123454536f667445454d537973576562";

        $iv = substr("1234577290ABCDEF1264147890ACAE45", 0, 16);

        // $t = 'T10515';

        // $encrypted = "b7y/JPJFNTfxNVR8H4NNtw==";

        return  mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $pk, base64_decode($encrypted), MCRYPT_MODE_CBC, $iv);

    }

可以推断, js 部分实际只使用了 iv 的 16 位长度

ps:

js加密后默认会base64_encode

使用php解密需要base64_decode后才一致

所以使用js加密和php解密时候需要注意,php端要先base64_decode再解密,例:

js加密的串是$t=b7y/JPJFNTfxNVR8H4NNtw==

php需要

$password= trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $pk,base64_decode( $t), MCRYPT_MODE_CBC, $iv));

则$password才能正确解析出来

需要引入的两个js文件

ase.js

[javascript] view plain copy

/*

CryptoJS v3.1.2

code.google.com/p/crypto-js

(c) 2009-2013 by Jeff Mott. All rights reserved.

code.google.com/p/crypto-js/wiki/License

*/

var CryptoJS=CryptoJS||function(u,p){var d={},l=d.lib={},s=function(){},t=l.Base={extend:function(a){s.prototype=this;var c=new s;ac.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)(this[c]=a[c]);a.hasOwnProperty("toString")(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},

r=l.WordArray=t.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=p?c:4*a.length},toString:function(a){return(a||v).stringify(this)},concat:function(a){var c=this.words,e=a.words,j=this.sigBytes;a=a.sigBytes;this.clamp();if(j%4)for(var k=0;ka;k++)c[j+k2]|=(e[k2]24-8*(k%4)255)24-8*((j+k)%4);else if(65535e.length)for(k=0;ka;k+=4)c[j+k2]=e[k2];else c.push.apply(c,e);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c2]=4294967295

32-8*(c%4);a.length=u.ceil(c/4)},clone:function(){var a=t.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],e=0;ea;e+=4)c.push(4294967296*u.random()|0);return new r.init(c,a)}}),w=d.enc={},v=w.Hex={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;ja;j++){var k=c[j2]24-8*(j%4)255;e.push((k4).toString(16));e.push((k15).toString(16))}return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;jc;j+=2)e[j3]|=parseInt(a.substr(j,

2),16)24-4*(j%8);return new r.init(e,c/2)}},b=w.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;ja;j++)e.push(String.fromCharCode(c[j2]24-8*(j%4)255));return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;jc;j++)e[j2]|=(a.charCodeAt(j)255)24-8*(j%4);return new r.init(e,c)}},x=w.Utf8={stringify:function(a){try{return decodeURIComponent(escape(b.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return b.parse(unescape(encodeURIComponent(a)))}},

q=l.BufferedBlockAlgorithm=t.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){"string"==typeof a(a=x.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,e=c.words,j=c.sigBytes,k=this.blockSize,b=j/(4*k),b=a?u.ceil(b):u.max((b|0)-this._minBufferSize,0);a=b*k;j=u.min(4*a,j);if(a){for(var q=0;qa;q+=k)this._doProcessBlock(e,q);q=e.splice(0,a);c.sigBytes-=j}return new r.init(q,j)},clone:function(){var a=t.clone.call(this);

a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:t.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){athis._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,e){return(new a.init(e)).finalize(b)}},_createHmacHelper:function(a){return function(b,e){return(new n.HMAC.init(a,

e)).finalize(b)}}});var n=d.algo={};return d}(Math);

(function(){var u=CryptoJS,p=u.lib.WordArray;u.enc.Base64={stringify:function(d){var l=d.words,p=d.sigBytes,t=this._map;d.clamp();d=[];for(var r=0;rp;r+=3)for(var w=(l[r2]24-8*(r%4)255)16|(l[r+12]24-8*((r+1)%4)255)8|l[r+22]24-8*((r+2)%4)255,v=0;4vr+0.75*vp;v++)d.push(t.charAt(w6*(3-v)63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join("")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t(t=d.indexOf(t),-1!=t(l=t));for(var t=[],r=0,w=0;w

l;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))2*(w%4),b=s.indexOf(d.charAt(w))6-2*(w%4);t[r2]|=(v|b)24-8*(r%4);r++}return p.create(t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();

(function(u){function p(b,n,a,c,e,j,k){b=b+(na|~nc)+e+k;return(bj|b32-j)+n}function d(b,n,a,c,e,j,k){b=b+(nc|a~c)+e+k;return(bj|b32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(bj|b32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(bj|b32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},

_doProcessBlock:function(q,n){for(var a=0;16a;a++){var c=n+a,e=q[c];q[c]=(e8|e24)16711935|(e24|e8)4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),

f=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,

m,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,

E,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c5]|=12824-c%32;var e=u.floor(a/

4294967296);n[(c+6494)+15]=(e8|e24)16711935|(e24|e8)4278255360;n[(c+6494)+14]=(a8|a24)16711935|(a24|a8)4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4a;a++)c=n[a],n[a]=(c8|c24)16711935|(c24|c8)4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);

(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.lengthq;){ns.update(n);var n=s.update(d).finalize(r);s.reset();for(var a=1;ap;a++)n=s.finalize(n),s.reset();b.concat(n)}b.sigBytes=4*q;return b}});u.EvpKDF=function(d,l,p){return s.create(p).compute(d,

l)}})();

CryptoJS.lib.Cipher||function(u){var p=CryptoJS,d=p.lib,l=d.Base,s=d.WordArray,t=d.BufferedBlockAlgorithm,r=p.enc.Base64,w=p.algo.EvpKDF,v=d.Cipher=t.extend({cfg:l.extend(),createEncryptor:function(e,a){return this.create(this._ENC_XFORM_MODE,e,a)},createDecryptor:function(e,a){return this.create(this._DEC_XFORM_MODE,e,a)},init:function(e,a,b){this.cfg=this.cfg.extend(b);this._xformMode=e;this._key=a;this.reset()},reset:function(){t.reset.call(this);this._doReset()},process:function(e){this._append(e);return this._process()},

finalize:function(e){ethis._append(e);return this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(b,k,d){return("string"==typeof k?c:a).encrypt(e,b,k,d)},decrypt:function(b,k,d){return("string"==typeof k?c:a).decrypt(e,b,k,d)}}}});d.StreamCipher=v.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var b=p.mode={},x=function(e,a,b){var c=this._iv;c?this._iv=u:c=this._prevBlock;for(var d=0;db;d++)e[a+d]^=

c[d]},q=(d.BlockCipherMode=l.extend({createEncryptor:function(e,a){return this.Encryptor.create(e,a)},createDecryptor:function(e,a){return this.Decryptor.create(e,a)},init:function(e,a){this._cipher=e;this._iv=a}})).extend();q.Encryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize;x.call(this,e,a,c);b.encryptBlock(e,a);this._prevBlock=e.slice(a,a+c)}});q.Decryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize,d=e.slice(a,a+c);b.decryptBlock(e,a);x.call(this,

e,a,c);this._prevBlock=d}});b=b.CBC=q;q=(p.pad={}).Pkcs7={pad:function(a,b){for(var c=4*b,c=c-a.sigBytes%c,d=c24|c16|c8|c,l=[],n=0;nc;n+=4)l.push(d);c=s.create(l,c);a.concat(c)},unpad:function(a){a.sigBytes-=a.words[a.sigBytes-12]255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,

this,bb.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,

1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},

decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,

b.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();

(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256c;c++)a[c]=128c?c1:c1^283;for(var e=0,j=0,c=0;256c;c++){var k=j^j1^j2^j3^j4,k=k8^k255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y24|y8;r[e]=y16|y16;w[e]=y8|y24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y24|y8;x[k]=y16|y16;q[k]=y8|y24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,

16,32,64,128,27,54],d=d.aes=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;ja;j++)if(jd)e[j]=c[j];else{var k=e[j-1];j%d?6d4==j%d(k=l[k24]24|l[k16255]16|l[k8255]8|l[k255]):(k=k8|k24,k=l[k24]24|l[k16255]16|l[k8255]8|l[k255],k^=H[j/d|0]24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;da;d++)j=a-d,k=d%4?e[j]:e[j-4],c[d]=4d||4=j?k:b[l[k24]]^x[l[k16255]]^q[l[k

8255]]^n[l[k255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;rm;r++)var q=d[g24]^e[h16255]^j[k8255]^l[n255]^c[p++],s=d[h24]^e[k16255]^j[n8255]^l[g255]^c[p++],t=

d[k24]^e[n16255]^j[g8255]^l[h255]^c[p++],n=d[n24]^e[g16255]^j[h8255]^l[k255]^c[p++],g=q,h=s,k=t;q=(f[g24]24|f[h16255]16|f[k8255]8|f[n255])^c[p++];s=(f[h24]24|f[k16255]16|f[n8255]8|f[g255])^c[p++];t=(f[k24]24|f[n16255]16|f[g8255]8|f[h255])^c[p++];n=(f[n24]24|f[g16255]16|f[h8255]8|f[k255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.aes=p._createHelper(d)})();

pad-zeropadding.js

/*

CryptoJS v3.1.2

code.google.com/p/crypto-js

(c) 2009-2013 by Jeff Mott. All rights reserved.

code.google.com/p/crypto-js/wiki/License

*/

/**

* Zero padding strategy.

*/

CryptoJS.pad.ZeroPadding = {

    pad: function (data, blockSize) {

        // Shortcut

        var blockSizeBytes = blockSize * 4; 

        // Pad

        data.clamp();

        data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);

    }, 

    unpad: function (data) {

        // Shortcut

        var dataWords = data.words; 

        // Unpad

        var i = data.sigBytes - 1;

        while (!((dataWords[i 2] (24 - (i % 4) * 8)) 0xff)) {

            i--;

        }

        data.sigBytes = i + 1;

    }

}; 

前端使用CryptoJS aes加密 ,后端php解密问题

PHP7.1 已经不能用mcrypt了,所以我用的是openssl_encrypt和openssl_decrypt。

?php  

$data  = "This is an aes crypt demo.";  

$privateKey = "5d4bcd5912db00c28e9ce7fd5e9b7f78";  // KEY 16字节用aes-128-cbc,32字节用aes-256-cbc

$iv= "4490d2ded4f2d4ad";  //aes的IV是16个字节

  

//加密 

// $encrypted = openssl_encrypt($data,'aes-128-cbc',$privateKey,0,$iv);

$encrypted = openssl_encrypt($data,'aes-256-cbc',$privateKey,0,$iv);

echo $encrypted,PHP_EOL;

// 解密  

$encryptedData = $encrypted;  

// $decrypted = openssl_decrypt($encryptedData,'aes-128-cbc',$privateKey,0,$iv);  

$decrypted = openssl_decrypt($encryptedData,'aes-256-cbc',$privateKey,0,$iv);  

echo($decrypted);

输出结果如下:

EPcMQRXA53/hRkPyILFI4fF/9sW2X53tLiDT26khNsA=

This is an aes crypt demo.

CryptoJS的aes方法密钥安全问题

如果你的填充模式不是PKCS5Padding肯定就解密不了了

CryptoJS.aes.encrypt(srcs, key, { iv: iv,mode:CryptoJS.mode.cbc.padding:CryptoJS.pad.NoPadding});

CryptoJS可以用的填充模式:

Pkcs7 (the default)

Iso97971

AnsiX923

Iso10126

ZeroPadding

智能化时代的到来涉及了各种核心算法,保护算法就能保障开发者权益,杜绝市面上各种山寨品,加密芯片恰好能起到很好的保护作用,如何选择加密芯片呢?KEROS加密芯片专注于加密领域十余年,行业首选。
1.安全性:采用国际通用aes256算法加密并同时通过KAS传送,除基本认证之外,利用2K安全EEPROM,用户可以自己管理密钥和数据,实现双重保护。
2.唯一性:以定制的方式为每一位用户单独定制“专属型号CID”,多用户之间算法不兼容,并且采用固化的方法直接将算法固化到晶圆上而无需烧入。
3.序列号:每颗芯片制造生产时具有5字节全球唯一SN序列号,每颗芯片SN都不会重复。
4.防抄特性:每颗芯片都有自己独特的密钥系统,破解单颗芯片只对这颗芯片对应的产品有效,对整个同类型的产品是无效的,依旧无法通过验证。而且KEROS采用ASIC方法设计,芯片内为纯逻辑电路,封装内有40多层逻辑电路整合了10万多个逻辑门,爆力刨片破解难度可想而知。
5.安全存储:用户可以将保密数据加密之后安全的存放到EEPROM中。aes加密js的介绍就聊到这里吧,感谢你花时间阅读本站内容。

本文标签:aes加密js

产品列表
产品封装
友情链接