PHP Mcrypt和HTML5加密API加密/解密

时间:2015-11-07 18:01:45

标签: javascript php html5 encryption aes

我需要通过网页为外部平台交换一系列密钥,可能会发生用户没有配置使用HTTPS的SSL证书,以便在开始传输之前以安全的方式执行此操作我发送确认代码用户邮箱,用这段代码我生成一个SHA-256哈希(用PHP和HTML5加密API完成),我用这个键作为AES-256(CBC)加密字符串的密钥,之后我把它转换成base64并发送到客户端,将其转换为文件并触发下载。问题是我无法将组件(IV连接到加密字符串)转换为JavaScript请求的格式。这里是解密代码:

string = window.atob(string);
promise_key = window.crypto.subtle.generateKey({name: "AES-CBC", length: 256}, false, ["decrypt"]);
promise_key.then(function(key){
    key_object = key;
    var vector = string.substr(0, 16);
    string = string.substr(16);
    decrypt_promise = window.crypto.subtle.decrypt({name: "AES-CBC", iv: vector, length: 256}, key_object, string);
    decrypt_promise.then(function(result){
        decrypted_data = new Uint8Array(result);
        console.log(decrypted_data);
    });
});

过程:

  1. 客户端向服务器发送AJAX请求以初始化密钥生成;
  2. 服务器向用户邮箱发送确认数字代码,向AJAX发送ID;
  3. 用户收到电子邮件,将代码写入网页并提交;
  4. 客户端使用提供的ID发送步骤2的AJAX请求;
  5. 服务器检查ID,生成并加密密钥并将其发送给客户端;
  6. 客户端准备使用SHA-256对电子邮件代码进行哈希处理的解密密钥(也是服务器执行此操作以进行加密);
  7. 客户端解密密钥,构建JSON字符串并触发下载为文件。

0 个答案:

没有答案