节点js中的RFC2898DeriveBytes等效项

舒莎·B

试图将下面的C#代码转换为nodeJS,但是结果不一样。这里需要一些帮助:C#代码:

public static string Encrypt(string clearText)
        {
            string EncryptionKey = "abcdef";
            byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
            using (Aes encryptor = Aes.Create())
            {
                Rfc2898DeriveBytes pdb = new
                    Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
                encryptor.Key = pdb.GetBytes(32);
                encryptor.IV = pdb.GetBytes(16);
                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(clearBytes, 0, clearBytes.Length);
                        cs.Close();
                    }
                    clearText = Convert.ToBase64String(ms.ToArray());
                }
            }
            return clearText;
}

在JS中尝试的代码:

const crypto = require('crypto'),
  algorithm = 'aes-256-cbc',
  secret = 'abcdef',
  keystring = crypto.createHash('sha256').update(String(secret)).digest('base64').substr(0, 32);
  iv = crypto.createHash('sha256').update(String(secret)).digest('base64').substr(0, 16);
  inputEncoding = 'utf8',
  outputEncoding = 'base64';


function encrypt(text) {
  let cipher = crypto.createCipheriv('aes-128-cbc', keystring, iv);
  let encrypted = cipher.update(text, inputEncoding, outputEncoding);
  encrypted += cipher.final(outputEncoding);
  return encrypted;
}

在节点js中寻找兼容版本

托帕可

PBKDF2的参数为:

const secret = 'abcdef';
const salt = Buffer.from([0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76]); 
const iterations = 1000;
const length = 32 + 16;
const digest = 'sha1';
const keyIV = crypto.pbkdf2Sync(secret, salt, iterations, length, digest);

的前32个字节keyIV是密钥,其后的16个字节是IV:

const key = keyIV.slice(0, 32);
const iv = keyIV.slice(32, 32 + 16);

在该encrypt方法中,必须将UTF-16LE用作输入编码(utf16le)和aes-256-cbc算法/模式:

const inputEncoding = 'utf16le';
const outputEncoding = 'base64';
const algorithm = 'aes-256-cbc';
function encrypt(text) {
    let cipher = crypto.createCipheriv(algorithm, key, iv);
    let encrypted = cipher.update(text, inputEncoding, outputEncoding);
    encrypted += cipher.final(outputEncoding);
    return encrypted;
}

测试:

console.log(encrypt("The quick brown fox jumps over the lazy dog")); // u9JQyr8G0FbU1D+TF1ZmXNK8cMZjhL7xbhYitmXVaWNDu1hDiBY6TNUjKcza4fX99xN0f1tT3qSNHMGWTV8o2QkDnVqNQai07qAX4R2iSW/j4E8CKGwVOCWnQ46HbfWs

根据C#代码的结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java中的Rfc2898DeriveBytes

来自分类Dev

等价于javascript中的Rfc2898DeriveBytes?

来自分类Dev

等价于javascript中的Rfc2898DeriveBytes?

来自分类Dev

在 php 中得到与 Rfc2898DeriveBytes 在 c# 中给出的相同的响应

来自分类Dev

如何在Rfc2898DeriveBytes这样的JavaScript中制作加密函数

来自分类Dev

在TripleDES中的Rfc2898DeriveBytes实现时具有有线输出

来自分类Dev

Rfc2898DeriveBytes IterationCount的目的和最佳实践

来自分类Dev

从C#在JavaScript中生成Rfc2898DeriveBytes密钥

来自分类Dev

从Rfc2898DeriveBytes类获取的最高字节数

来自分类Dev

使用Rfc2898DeriveBytes从明文密码创建安全密码时盐的重要性

来自分类Dev

JavaScript:如何生成类似于C#的Rfc2898DeriveBytes?

来自分类Dev

KeyDerivation.Pbkdf2和Rfc2898DeriveBytes有什么区别?

来自分类Dev

在Rfc2898DeriveBytes中使用变量迭代计数是否明智?

来自分类Dev

Rfc2898DeriveBytes密码与字符串匹配,而不与byte []匹配

来自分类Dev

无法为 Rfc2898DeriveBytes 指定 4 个参数(哈希算法名称)

来自分类Dev

Visual Studio 不显示 Rfc2898DeriveBytes 的所有构造函数

来自分类Dev

如何在盐和哈希码中将SHA-512与Rfc2898DeriveBytes一起使用?

来自分类Dev

Crypto ++ pbkdf2输出不同于Rfc2898DeriveBytes(C#)和crypto.pbkdf2(JavaScript)

来自分类Dev

具有Rfc2898DeriveBytes的PBKDF2对于相同的输入会产生不同的输出吗?

来自分类Dev

JS中的RSACryptoServiceProvider等效项

来自分类Dev

Node.js中的Javap等效项

来自分类Dev

Node.js中的Hash_hmac等效项

来自分类Dev

javascript / node.js中的seek()等效项?

来自分类Dev

什么是Node.js中的PHP die()等效项

来自分类Dev

Angular.js中的Django表单集等效项

来自分类Dev

如何在纯JS中实现jQuery .map()的等效项?

来自分类Dev

什么是Node.js中的PHP die()等效项

来自分类Dev

TCL中的ifdef等效项

来自分类Dev

Ruby中的charCodeAt()等效项

Related 相关文章

  1. 1

    Java中的Rfc2898DeriveBytes

  2. 2

    等价于javascript中的Rfc2898DeriveBytes?

  3. 3

    等价于javascript中的Rfc2898DeriveBytes?

  4. 4

    在 php 中得到与 Rfc2898DeriveBytes 在 c# 中给出的相同的响应

  5. 5

    如何在Rfc2898DeriveBytes这样的JavaScript中制作加密函数

  6. 6

    在TripleDES中的Rfc2898DeriveBytes实现时具有有线输出

  7. 7

    Rfc2898DeriveBytes IterationCount的目的和最佳实践

  8. 8

    从C#在JavaScript中生成Rfc2898DeriveBytes密钥

  9. 9

    从Rfc2898DeriveBytes类获取的最高字节数

  10. 10

    使用Rfc2898DeriveBytes从明文密码创建安全密码时盐的重要性

  11. 11

    JavaScript:如何生成类似于C#的Rfc2898DeriveBytes?

  12. 12

    KeyDerivation.Pbkdf2和Rfc2898DeriveBytes有什么区别?

  13. 13

    在Rfc2898DeriveBytes中使用变量迭代计数是否明智?

  14. 14

    Rfc2898DeriveBytes密码与字符串匹配,而不与byte []匹配

  15. 15

    无法为 Rfc2898DeriveBytes 指定 4 个参数(哈希算法名称)

  16. 16

    Visual Studio 不显示 Rfc2898DeriveBytes 的所有构造函数

  17. 17

    如何在盐和哈希码中将SHA-512与Rfc2898DeriveBytes一起使用?

  18. 18

    Crypto ++ pbkdf2输出不同于Rfc2898DeriveBytes(C#)和crypto.pbkdf2(JavaScript)

  19. 19

    具有Rfc2898DeriveBytes的PBKDF2对于相同的输入会产生不同的输出吗?

  20. 20

    JS中的RSACryptoServiceProvider等效项

  21. 21

    Node.js中的Javap等效项

  22. 22

    Node.js中的Hash_hmac等效项

  23. 23

    javascript / node.js中的seek()等效项?

  24. 24

    什么是Node.js中的PHP die()等效项

  25. 25

    Angular.js中的Django表单集等效项

  26. 26

    如何在纯JS中实现jQuery .map()的等效项?

  27. 27

    什么是Node.js中的PHP die()等效项

  28. 28

    TCL中的ifdef等效项

  29. 29

    Ruby中的charCodeAt()等效项

热门标签

归档