【问题标题】:symetric encryption with key for javascript and ruby使用 javascript 和 ruby​​ 的密钥进行对称加密
【发布时间】:2011-11-09 05:36:30
【问题描述】:

我想使用带有 ASCII 字符的密钥对一个最长 10 位的数字进行编码。

编码后的字符串应该可以用相同的 key 解码,应该返回解码后的数字。

10 => encoding_with("secret_pass") => hash => decoding_with("secret_pass") => 10

这两个操作在 Javascript 和 Ruby 中的工作方式应该相同。

为此我应该使用什么算法?

所有数据都应为 ASCII 格式,输入、哈希和密钥不能使用多字节数据。

【问题讨论】:

  • 仅供参考,浏览器内的 JavaScript 加密是浪费时间。参见例如扩展讨论:matasano.com/articles/javascript-cryptography
  • 没关系,问题不在于它是否有意义
  • 请注意,您要查找的是ciphertext,而不是hash - 根据定义,哈希是不可逆的。
  • ROT13 然后。由于这是客户端、无保证的浏览器内环境,因此在安全性方面其他任何东西都是等效的。
  • @Chris:我为讽刺的语气道歉,这确实是不必要的;编辑出来。重点是——用JS模拟HTTPS就像是用锤子切蛋糕(比如,你如何保证JS加密代码是合法的?)。

标签: javascript ruby algorithm security encryption


【解决方案1】:

我会研究一些Symmetric Key Encryption,最突出的AES. AES 几乎是标准,并以两种语言实现。只需确保使用相同的密钥和盐进行加密和解密即可。

Javascript AES

Ruby AES

【讨论】:

    【解决方案2】:

    如果您希望它简单,并且安全性不是一个大问题(因为 javascript... 在 cmets 中观察),最简单的方法是简单地生成任何随机值,大于(更多位数)数字,然后与数字进行简单的异或运算。这假设密钥(=随机数)之前已与其他程序共享。

    1. generate random number with 10 hex digits -> KEY
    2. take the number then do (number XOR key ) -> result
    3. send result
    4. get the result and do (result XOR key) -> number
    

    更好(更强)的方法是使用任何公私钥系统。交换密钥,一侧用公共加密,另一侧用私人解密。

    【讨论】:

    • 您是否建议私钥交给网页的每个用户?请注意,计算的一侧发生在 JavaScript 中。该密钥不会非常私密,IMNSHO。
    • @Piskvor:不,我想他是在建议交出公钥。尽管这显然没有帮助,因为将密文与密钥一起发送以解密它是没有意义的。我认为尽管您可以使用 javascript 使用公钥加密客户端上的文本并将其发送回。那么你唯一的问题是 javascript 注入式攻击......
    • @Chris:另外,验证加密代码的真实性是不可能的(例如针对 MITM)——您使用谁的密钥进行加密?您使用的是正确的库,还是巧妙地 损坏的库? (就此而言,在 JS 中算法的密码学上合理的实现是否甚至存在?)
    【解决方案3】:

    一个简单的异或就足够了。

    JavaScript

    Ruby

    是的,您可以过分使用完整的加密套件,但由于算法的一部分将在浏览器中运行,在 JS(完全不受信任的环境)中,任何尝试 Serious Cryptography™ 都会给您一个@987654323 @ of security(换句话说,实际上会使您的系统不那么安全)。

    如果您想保护传输中的数据,请使用专为这项工作设计的工具;在这种情况下,HTTPS。

    【讨论】:

      猜你喜欢
      • 2019-12-29
      • 2014-04-13
      • 1970-01-01
      • 2012-04-11
      • 2017-11-20
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      相关资源
      最近更新 更多