首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >,{Object允诺}在加密+十六进制值后发布到API中。

,{Object允诺}在加密+十六进制值后发布到API中。
EN

Stack Overflow用户
提问于 2021-01-24 03:40:01
回答 1查看 120关注 0票数 1

Intro

你好。因此,我将很快加密为JavaScript对象的属性,以便将其发送到我的API中。我正在使用带有secp256k1密钥的ECIES方案。这会在承诺对象被发送到API之前返回它。我对浏览器中的多线程“东西”不是很熟悉(异步等待),我想知道它为什么要这样做,以及我如何能够修复这个问题。我认为,这可能是一个更大的问题,而且无法将我从API中检索的相同值与客户端值进行适当的比较,因为它被比较为"{Object允诺}“。如果这不能使我找到一个可行的解决办法,我将把它放在另一个问题上。在最后发布的第二个代码片段中,您将看到"encryptMes“函数,这是返回对象承诺的内容

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

相关

代码语言:javascript
复制
       <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>

..。

代码语言:javascript
复制
    <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

代码语言: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;
}

..。

代码语言:javascript
复制
window.getPKey = function()
{
    var PKey = localStorage.getItem("pkey");

    var pkey = JSON.parse(PKey);

    console.log(pkey);

    return pkey;
}

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

控制台

代码语言:javascript
复制
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: {…}}
EN

回答 1

Stack Overflow用户

发布于 2021-01-24 03:55:42

你需要等待承诺被解决,直到你可以使用结果。使用async/await

代码语言:javascript
复制
window.encryptMes = async function(data)
{
    // ...

    var encryptedMes = await eccrypto.encrypt(pkey, Buffer.from(data));
    var enMes = encryptedMes.toString('hex');

    // ...

    return enMes;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65866929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档