【问题标题】:Alternate Code in JavaScript for javax.crypto用于 javax.crypto 的 JavaScript 中的备用代码
【发布时间】:2016-12-02 10:46:43
【问题描述】:

我想在 JavaScript 中实现以下代码,而不是使用 javax.crypto 包。

以下代码将使用 AES 生成密钥。

    KeyGenerator kgen;
    String key;
    try {
        kgen = KeyGenerator.getInstance("AES");
        kgen.init(128);
        SecretKey secretkey = kgen.generateKey();
        BASE64Encoder encode = new BASE64Encoder();
        key = encode.encode(secretkey.getEncoded());
    } catch (NoSuchAlgorithmException e) {
       // exceptionLogFile(e, null);
        e.printStackTrace();
        key = "Error@SecretKeyGeneration: No Such Algorith Exception. " + e.getMessage();
    } catch (Exception e) {
       // exceptionLogFile(e, null);
        e.printStackTrace();
        key = "Error@SecretKeyGeneration: " + e.getMessage();
    }
    return key;

这在 Java 中完美运行,现在任何人都可以建议我在 JavaScript 中替代。

我了解了Crypto.js,但我在这里如何使用,不明白。

对于加密和解密,我使用的是"AES/ECB/PKCS5Padding",所以它与 javascript 代码兼容吗?

请帮忙。

提前致谢。

【问题讨论】:

  • 欧洲央行不安全。传输模式安全的 CBC 也是如此。
  • 最好抛出 RuntimeException 而不是返回一个奇怪的字符串。尽量避免创建“字符串类型”软件(查找它!)。

标签: javascript encryption aes cryptojs key-generator


【解决方案1】:

AES 密钥仅由随机字节组成。所以对于一个 128 字节的密钥,你可以这样做:

var key = CryptoJS.lib.WordArray.random(128/8);

并对其进行编码:

var keyBase64 = CryptoJS.enc.Base64.stringify(key);

当然,密钥不会与您之前生成的相同,您需要对之前生成的 base 64 编码密钥进行解码才能做到这一点。


要使用密钥,请使用显式密钥参数:

var encrypted = CryptoJS.AES.encrypt("Message", key, { mode: CryptoJS.mode.ECB});

PKCS#7 填充 - 与 PKCS#5 填充相同 - 已经是默认值,ECB 不使用 IV。

【讨论】:

  • 感谢@Maarten Bodewes
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 2010-10-03
相关资源
最近更新 更多