如何在不增加密码的情况下用密码加密文本?

Joe Huang

我正在加密这样的文本(node.js):

var text = "holds a long string..."
var cipher = crypto.createCipher("aes128", "somepassword")
var crypted = cipher.update(text, 'utf8', 'hex')
crypted += cipher.final('hex');

如果我text直接保存到文件,则为N个字节。如果保存crypted,文件大小约为N * 2字节。

有什么办法可以使加密文本尽可能接近N个字节?

Artjom B.

像AES这样的现代密码可以对二进制数据进行处理。加密字符数据时,首先将其转换为二进制表示形式。这基本上就是UTF-8编码所做的。加密后,您会得到任意的二进制数据,当您尝试对其进行解码时,不一定是有效的UTF-8编码(几乎所有编码都有特殊的结构)。

如果省略output_encodingfromCipher#updateCipher#final,则会得到一个Buffer,可以将其连接或写入文件。它以二进制格式管理数据,但在打印时默认为十六进制。当您将缓冲区写入文件时,文件大小将接近纯文本大小,但永远不会达到该大小。

AES是一种分组密码,只能加密一个正好16字节的块。ECB或CBC之类的操作模式使您可以加密多个块。最后,像默认的PKCS#7填充这样的填充方案使您能够加密任意长度的文本。该填充总是在实际解密之前添加一些字节。确切地说,它增加了1到16个字节。

您可以使用它cipher.setAutoPadding(false)来防止填充,但是随后您需要填充自己。您还可以使用类似CTR(“ aes-128-ctr”)的流模式,但是随后您需要提供12字节唯一IV(即刻)以确保其安全性。此随机数不必是秘密的,但您必须将其传输到解密器。

最后,密文实际上不可能与明文完全一样大小。总有一些东西会使密文膨胀。


切勿使用crypto.createCipher您需要使用随机密码来获得语义安全性。使用crypto.createCipheriv带有新鲜和随机IV。对于CTR模式,IV必须是唯一的;对于CBC模式,IV必须是不可预测的。

始终使用经过身份验证的加密。它使您能够检测到错误的密钥和密文的(恶意)篡改。这是AES-GCM的示例。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不加密的情况下用密码保护外部硬盘驱动器?

来自分类Dev

如何在没有用户输入密码的情况下用C#加密和解密敏感信息

来自分类Dev

如何在不向客户端展示算法的情况下加密用于API访问的密码?

来自分类Dev

如何在没有加密密码的情况下对Adonis使用“ auth”?

来自分类Dev

如何在Python中打开多个加密的PDF并在没有密码的情况下保存

来自分类Dev

如何在不提示磁盘加密密码的情况下创建访客帐户

来自分类Dev

如何在没有 symfony 安全性的情况下加密用户密码

来自分类Dev

如何在不丢失加密的情况下更新加密的7zip存档?

来自分类Dev

如何在没有密码提示的情况下自动登录到完全加密的Ubuntu系统?

来自分类Dev

如何在没有密码提示的情况下自动登录到完全加密的Ubuntu系统?

来自分类Dev

如何在不使用TrueCrypt的情况下使用Twofish密码和SHA-512哈希对USB驱动器分区进行加密?

来自分类Dev

如何在Linux中不创建未加密文件的情况下读取openssl aes-256-cbc加密文件?

来自分类Dev

如何在不包含奇怪字符的情况下使用XOR加密字符串?

来自分类Dev

如何在不破坏其编码的情况下使用 ajax 查看加密的 bin 文件?

来自分类Dev

希望自动增加密码

来自分类Dev

我的驱动器是否已加密?我可以在不提供密码的情况下读取加密分区

来自分类Dev

是否在没有设备密码的情况下对iOS钥匙串进行了加密?

来自分类Dev

为什么在没有密码的情况下无法登录我的加密帐户?

来自分类Dev

为什么在没有密码的情况下无法登录我的加密帐户?

来自分类Dev

在不提供密码的情况下添加到加密文件的方法

来自分类Dev

HTML如何在不更改标签的情况下输入密码

来自分类Dev

如何在不询问密码的情况下通过SSH启用sudo命令?

来自分类Dev

如何在不触发提示的情况下将密码短语传递给ssh-add?

来自分类Dev

如何在不每次输入密码的情况下将更改推送到远程存储库?

来自分类Dev

CakePHP 3 如何在不更改密码的情况下编辑用户(散列)

来自分类Dev

如何在Wildfly中加密bindCredential密码?

来自分类Dev

如何在加密的fs上重设密码?

来自分类Dev

使用密码,如何在克隆后找到全盘加密的密码

来自分类Dev

如何在不增加边距的情况下更改换行的div文本的行高?

Related 相关文章

  1. 1

    如何在不加密的情况下用密码保护外部硬盘驱动器?

  2. 2

    如何在没有用户输入密码的情况下用C#加密和解密敏感信息

  3. 3

    如何在不向客户端展示算法的情况下加密用于API访问的密码?

  4. 4

    如何在没有加密密码的情况下对Adonis使用“ auth”?

  5. 5

    如何在Python中打开多个加密的PDF并在没有密码的情况下保存

  6. 6

    如何在不提示磁盘加密密码的情况下创建访客帐户

  7. 7

    如何在没有 symfony 安全性的情况下加密用户密码

  8. 8

    如何在不丢失加密的情况下更新加密的7zip存档?

  9. 9

    如何在没有密码提示的情况下自动登录到完全加密的Ubuntu系统?

  10. 10

    如何在没有密码提示的情况下自动登录到完全加密的Ubuntu系统?

  11. 11

    如何在不使用TrueCrypt的情况下使用Twofish密码和SHA-512哈希对USB驱动器分区进行加密?

  12. 12

    如何在Linux中不创建未加密文件的情况下读取openssl aes-256-cbc加密文件?

  13. 13

    如何在不包含奇怪字符的情况下使用XOR加密字符串?

  14. 14

    如何在不破坏其编码的情况下使用 ajax 查看加密的 bin 文件?

  15. 15

    希望自动增加密码

  16. 16

    我的驱动器是否已加密?我可以在不提供密码的情况下读取加密分区

  17. 17

    是否在没有设备密码的情况下对iOS钥匙串进行了加密?

  18. 18

    为什么在没有密码的情况下无法登录我的加密帐户?

  19. 19

    为什么在没有密码的情况下无法登录我的加密帐户?

  20. 20

    在不提供密码的情况下添加到加密文件的方法

  21. 21

    HTML如何在不更改标签的情况下输入密码

  22. 22

    如何在不询问密码的情况下通过SSH启用sudo命令?

  23. 23

    如何在不触发提示的情况下将密码短语传递给ssh-add?

  24. 24

    如何在不每次输入密码的情况下将更改推送到远程存储库?

  25. 25

    CakePHP 3 如何在不更改密码的情况下编辑用户(散列)

  26. 26

    如何在Wildfly中加密bindCredential密码?

  27. 27

    如何在加密的fs上重设密码?

  28. 28

    使用密码,如何在克隆后找到全盘加密的密码

  29. 29

    如何在不增加边距的情况下更改换行的div文本的行高?

热门标签

归档