Javascript,{Object Promise}加密后发布到API+十六进制值



简介

你好。因此,我正在加密即将成为JavaScript对象的属性,以便将其发送到我的API。我使用的是带有secp256k1密钥的ECIES方案。这会在promise对象被发送到API之前返回它。我对多线程";"东西";在浏览器中(async wait),我想知道它为什么这么做,以及如何解决这个问题。我相信这可能是一个更大问题的问题,并且这不能适当地将我从API检索到的非常相同的值与客户端值进行比较;{Object Promise}";。如果这不能让我找到一个可行的解决方案,我将在另一个问题中发表这一点。在最后发布的第二个代码片段中,您将看到";encryptMes";函数,这就是返回Object Promise 的内容

Focus:为什么返回{Object Promise},以及如何使它只返回一个常规Object?

相关HTML

<form id="login-form" name ="signup-form">
<input class="login-form-field" type="text" name="user" placeholder="username">
<input class="login-form-field" type="text" name="email" placeholder="email">
<input class="login-form-field" type="password" name="dob" placeholder="date of birth">
<br>
<!--<button class="actionButton"></button>-->
<INPUT TYPE="button" class="button-success" NAME="button" Value="sign up" onClick="signupData(this.form)">
<br>
<div class="signup">
<a href="login.html">login</a>
</div>
</form>

<script  LANGUAGE="JavaScript">
function signupData(form) //add to this script
{
console.log("signup data is starting");
var user = form.user.value;
var email = form.email.value;
var dob = form.dob.value;
console.log("checkpoint: 1");
genSKey();
console.log("checkpoint: 2");
console.log("checkpoint: 3");
var enUser = encryptMes(user);
//var enEmail = encryptMes(email);
var enDOB = encryptMes(dob);
var data = {name:"LifeNet", members:{}} //you added members to the same area in the object so it is always replacing members since it's the field of data
data.members[enUser] = {profilePic:{},enDOB, listeners:{}, listening:{}, friends:{}, requested:{}, blocked:{}, channel:false}
console.log("checkpoint: 3");
console.log({data});
apiPost({data});
//pass the signup function in here
//hash the variables and send to celox network
//console.log(JSON.stringify({data}));
//alert (`copy and save your Private Key to somewhere safe: ${skey}`);
//window.location.href= "login.html";
}
</script>

Borwserify之前构建的相关Javascript

window.encryptMes = function(data)
{
//for this you need to get the sender's public key to encrypt the message
console.log("encryptmes: began");
var pkey = genPKey();
if (pkey === null || undefined) 
{

console.log('You do not have a key pair');
}
var encryptedMes = eccrypto.encrypt(pkey, Buffer.from(data));
var enMes = encryptedMes.toString('hex');
console.log(encryptedMes); //could be this since it is not stringified when it goes into celox network
console.log(enMes);
return enMes;
}

window.getPKey = function()
{
var PKey = localStorage.getItem("pkey");
var pkey = JSON.parse(PKey);
console.log(pkey);
return pkey;
}

当然,在我的html文件中的脚本标记中,它会被发送到一个fetch post请求。我知道这不是问题所在,所以我没有把它包括在内

控制台

signup data is starting
signup.html:188 checkpoint: 1
genKey.js:26600 opened
genKey.js:26607 Uint8Array(32) [185, 57, 181, 13, 182, 166, 40, 167, 153, 254, 37, 163, 186, 81, 215, 243, 93, 65, 225, 160, 171, 0, 39, 189, 187, 157, 148, 193, 123, 124, 19, 194]
genKey.js:26608 b939b50db6a628a799fe25a3ba51d7f35d41e1a0ab0027bdbb9d94c17b7c13c2
signup.html:192 checkpoint: 2
signup.html:194 checkpoint: 3
genKey.js:26684 encryptmes: began
genKey.js:26623 getSKey flag: 0
genKey.js:26629 getSKey flag: 1
genKey.js:26633 Uint8Array(32) [185, 57, 181, 13, 182, 166, 40, 167, 153, 254, 37, 163, 186, 81, 215, 243, 93, 65, 225, 160, 171, 0, 39, 189, 187, 157, 148, 193, 123, 124, 19, 194]
genKey.js:26635 getSKey flag: 2
genKey.js:26640 getSKey flag: 3
genKey.js:26698 Promise {<pending>}
genKey.js:26699 [object Promise]
genKey.js:26684 encryptmes: began
genKey.js:26623 getSKey flag: 0
genKey.js:26629 getSKey flag: 1
genKey.js:26633 Uint8Array(32) [185, 57, 181, 13, 182, 166, 40, 167, 153, 254, 37, 163, 186, 81, 215, 243, 93, 65, 225, 160, 171, 0, 39, 189, 187, 157, 148, 193, 123, 124, 19, 194]
genKey.js:26635 getSKey flag: 2
genKey.js:26640 getSKey flag: 3
genKey.js:26698 Promise {<pending>}
genKey.js:26699 [object Promise]
signup.html:204 checkpoint: 3
signup.html:206 {data: {…}}

您需要等待Promise被解析,直到您可以使用结果为止。使用async/await

window.encryptMes = async function(data)
{
// ...
var encryptedMes = await eccrypto.encrypt(pkey, Buffer.from(data));
var enMes = encryptedMes.toString('hex');
// ...
return enMes;
}

最新更新