前端对中文进行encodeURI,这样中文就会变成字符,英文和数字,再对其进行sha1加密,就可以和php的一致了,之后在后端用urldecode还原为中文就行了.前端和后端的URL编码函数是不同的需要注意.
!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"
? var encrypted = CryptoJS.AES.encrypt(text, key, {
? ? ? iv: iv,
? ? ? mode: CryptoJS.mode.CBC,
? ? ? padding: CryptoJS.pad.ZeroPadding
? }).toString()
? document.write(encrypted);
? /script
/body
/html
后端
? }?
? }
ps:
php需要
则$password才能正确解析出来
需要引入的两个js文件
ase.js
[javascript] view plain copy
/*
code.google.com/p/crypto-js
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)}},
e)).finalize(b)}}});var n=d.algo={};return d}(Math);
l)}})();
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,
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)}})}();
pad-zeropadding.js
/**
* Zero padding strategy.
CryptoJS.pad.ZeroPadding = {
? pad: function (data, blockSize) {
? ? ? // Shortcut
? ? ? // Pad
? ? ? data.clamp();
? ? ? data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);
? },?
? unpad: function (data) {
? ? ? var dataWords = data.words;?
? ? ? // Unpad
? ? ? var i = data.sigBytes - 1;
? ? ? ? ? i--;
? ? ? }
? ? ? data.sigBytes = i + 1;
};?
php?
$data?=?"This?is?an?AES?crypt?demo.";?
//加密?
echo?$encrypted,PHP_EOL;
//?解密?
$encryptedData?=?$encrypted;?
echo($decrypted);
输出结果如下:
This?is?an?AES?crypt?demo.
php的输出是正确的 不一致要改js的
这两种编码编出来的字节是不一样
导致你看到的结果不一样.
如果你想PHP加出来和在线加密一样,你可以把编码转一致就可以了.
这样子就能和在线加密是一样的了.
在JS里面也可嵌套PHP语言,所以可以直接嵌套就好了
以上就是土嘎嘎小编为大家整理的js和php加密相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!