当前位置: 首页 > 知识库问答 >
问题:

JavaScript--2020年如何仅用密码加密字符串?[副本]

刘令
2023-03-14

我想用人类可读的密码加密/解密一个字符串。加密的数据应该是可以解密的,只知道密码。2020年推荐的工具是什么?

>

  • 内置SubtleCrypto接口中的对称加密需要生成密钥(基于我找到的示例),并且它们还需要用于解密的额外数据(计数器或iv值)。
  • 相关SO问题为6岁

    const data = "Hello World";
    const key = "SuperSecret";
    
    const encrypted = encrypt(data, key);
    console.log(encrypted);  // gibberish
    
    const decrypted = decrypt(encrypted, key);
    console.log(decrypted);  // Hello World
    
  • 共有1个答案

    韦睿
    2023-03-14

    这里有一个例子,实现简单的加密/解密

    // derive string key
    async function deriveKey(password) {
      const algo = {
        name: 'PBKDF2',
        hash: 'SHA-256',
        salt: new TextEncoder().encode('a-unique-salt'),
        iterations: 1000
      }
      return crypto.subtle.deriveKey(
        algo,
        await crypto.subtle.importKey(
          'raw',
          new TextEncoder().encode(password),
          {
            name: algo.name
          },
          false,
          ['deriveKey']
        ),
        {
          name: 'AES-GCM',
          length: 256
        },
        false,
        ['encrypt', 'decrypt']
      )
    }
    
    // Encrypt function
    async function encrypt(text, password) {
      const algo = {
        name: 'AES-GCM',
        length: 256,
        iv: crypto.getRandomValues(new Uint8Array(12))
      }
      return {
        cipherText: await crypto.subtle.encrypt(
          algo,
          await deriveKey(password),
          new TextEncoder().encode(text)
        ),
        iv: algo.iv
      }
    }
    
    // Decrypt function
    async function decrypt(encrypted, password) {
      const algo = {
        name: 'AES-GCM',
        length: 256,
        iv: encrypted.iv
      }
      return new TextDecoder().decode(
        await crypto.subtle.decrypt(
          algo,
          await deriveKey(password),
          encrypted.cipherText
        )
      )
    }
    
    // example
    ;(async () => {
      // encrypt
      const encrypted = await encrypt('Secret text', 'password')
    
      // the cipher text
      console.log(
        String.fromCharCode.apply(null, new Uint8Array(encrypted.cipherText))
      )
    
      // decrypt it
      const decrypted = await decrypt(encrypted, 'password')
      console.log(decrypted) // Secret text
    })()
     类似资料:
    • 我感兴趣的是构建一个个人使用的小应用程序,它将使用JavaScript在客户端加密和解密信息。加密的信息将存储在服务器上的数据库中,但不会存储解密的版本。 它不一定要是超级duper安全的,但我想使用一个当前未中断的算法。 理想情况下我可以做一些 生成编码字符串,以及类似于 以后再解码。 到目前为止,我已经看到了以下内容:http://bitwiseshiftleft.github.io/sjcl

    • 我的代码如下: 有人来帮我吗

    • 问题内容: 我的意思是: 也许像: 在PHP中,您该怎么做? 尝试使用 ,但对我不起作用。 问题答案: 更新 PHP 7就绪版本。它使用PHP OpenSSL库中的openssl_encrypt函数。

    • 我的意思是: 可能是这样的: null 尝试使用,但对我不起作用。

    • 我正在编写一个程序,以这种方式加密一个给定的字符串: 如果我们有一个整数V和一个只有元音的数组v={a,e,I,o,u}如果字符串的字母是一个元音,那么用它前面V个位置的元音替换它,只考虑元音的数组(不是整个字母表!). 要明确: 所以为了解决我的问题,我写了: 代码采用字符串的每个元素来验证它是否是元音,然后如果它是元音,则将字符串的考虑元素替换为 V 位置之前的元音。 如果字符串只有元音 i,

    • V1.1.1新增 <?php $string='666666'; $string=sp_authencode($string);//加密字符串 echo $string;//输出加密后的字符串 ?>