【发布时间】:2017-10-06 09:24:24
【问题描述】:
我正在尝试使用 webcrypto 加密并使用 php 中的 openssl 解密。要在 php 中解密,我需要一个身份验证标签。有没有一种方法可以从密文中提取它,或者我可以通过其他任何方式来获取它? webcrypto中的加密方式是:
var stringToArrayBuffer=function(str){
var bytes = new Uint8Array(str.length);
for (var iii = 0; iii < str.length; iii++){
bytes[iii] = str.charCodeAt(iii);
}
return bytes;
}
var arrayBufferToString=function(buffer){
var str = "";
for (var iii = 0; iii < buffer.byteLength; iii++){
str += String.fromCharCode(buffer[iii]);
}
return str;
}
var vector=window.crypto.getRandomValues(new Uint8Array(12)),sendData={},key;
sendData.iv=btoa(arrayBufferToString(new Uint8Array(vector));
crypto.subtle.generateKey({name: "AES-GCM",length: 256,},false,["encrypt", "decrypt"]).then(function(oKey){
console.log(oKey);
key=oKey;
sendData.key=btoa(arrayBufferToString(new Uint8Array(key));
}).catch(function(err){console.error("generateKey:",err);});
crypto.subtle.encrypt({name: "AES-GCM", iv: vector,tagLength: 128,},key,stringToArrayBuffer(input)).then(
function(result){
console.log('encrypted',new Uint8Array(result))
encryptedDataString=arrayBufferToString(new Uint8Array(result));
sendData.dataString=btoa(arrayBufferToString(new Uint8Array(result)));
}
).catch(function(err){console.error("encryptData error:",err);});
【问题讨论】:
-
从最后切掉?
-
我如何从 var "result" 中分割它?
-
在 php 中,标签是一个长度为 16 的 utf-8 字符串。如果我在 javascript 中加密一个长度为 10 的字符串,我得到一个长度为 26 的加密 utf-8 字符串。我只是将最后 16 个字符并将它们用作 php 中的标记?
-
刚刚尝试从加密字符串中切出最后 16 个字符。不好。
-
您的解决方案是什么?谢谢。
标签: javascript php encryption