0
webcrypto를 사용하여 암호화하고 PHP에서 openssl을 사용하여 해독하려고합니다. PHP에서 해독하려면 인증 태그가 필요합니다. 암호문에서 추출하는 방법이 있습니까? 아니면 다른 방법으로 그것을 잡을 수 있습니까? webcrypto의 암호화는 다음과 같습니다webcrypto AES-GCM 암호화에서 태그를 얻는 방법
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);});
끝에서 슬라이스를 해제의 끝에서
tagLength
바이트 슬라이스해야합니까? –어떻게 var "결과"에서 슬라이스합니까? – gerteb
PHP에서 태그는 길이가 16 인 utf-8 문자열입니다. 자바 스크립트에서 길이가 10 인 문자열을 암호화하면 길이가 26 인 암호화 된 utf-8 문자열이 생깁니다. 마지막으로 16 문자 만 잘라내어 사용하십시오 PHP에서 태그로 그들을? – gerteb