2016-12-02 77 views
3

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

下面的代码将使用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 = "[email protected]: No Such Algorith Exception. " + e.getMessage(); 
    } catch (Exception e) { 
     // exceptionLogFile(e, null); 
     e.printStackTrace(); 
     key = "[email protected]: " + e.getMessage(); 
    } 
    return key; 

这是在Java中完美的工作,现在任何人都可以在JavaScript中提出我的选择。

我已经了解了Crypto.js但我怎么能在这里使用,不理解。

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

请帮忙。

在此先感谢。

+0

ECB不安全。 CBC对于运输模式的安全性也是如此。 –

+0

最好抛出一个RuntimeException,而不是返回一个奇怪的字符串。尝试并避免创建“字符串型”软件(查看它!)。 –

回答

3

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

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

,并对其进行编码:

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

当然关键也不会是相同的,你之前所产生的一个,你需要解码先前生成的基础64编码密钥来做到这一点。


要使用密钥,使用显式的关键参数:

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

PKCS#7填充 - 这是相同的PKCS#5填充 - 已经是默认和ECB不使用IV。

+0

Thanks @Maarten Bodewes –