将Java移植到JavaScript-Secretkeyspec

时间:2018-06-22 05:17:58

标签: javascript java

关于如何将以下JAVA代码转换为Javascript,谁能给我任何线索?

SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(), ALGORITHM);
Mac mac = Mac.getInstance(ALGORITHM);
mac.init(secretKeySpec);
byte[] rawHmac = mac.doFinal(data.getBytes());
BASE64Encoder encoder = new BASE64Encoder();        
return encoder.encodeBuffer(rawHmac).trim();

2 个答案:

答案 0 :(得分:1)

不可能将Java代码直接转换为Javascript。如果您正在寻找一种可以自动将Java逻辑或函数转换为Javascript的简单转换器,那么它就不存在。

您可能必须在Javascript中找到适当的库和函数。然后编写新的新鲜代码,这些代码将在Javascript中实现相同的逻辑。

话虽如此,CryptoJS是一个很好的成熟javascript库,支持各种加密标准。请参考它并用Javascript编写代码。

通过查看您的Java代码,我相信您正在尝试使用秘密密钥对一段文本进行加密。请看下面用Javascript编写的代码:

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


function  encrypt(){
  console.log('salt  '+ salt );
  console.log('iv  '+ iv );
  var key128Bits = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 128/32 }); 
  console.log( 'key128Bits '+ key128Bits);
  var key128Bits100Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 128/32, iterations: 100 });
  console.log( 'key128Bits100Iterations '+ key128Bits100Iterations);
  var encrypted = CryptoJS.AES.encrypt("Message", key128Bits100Iterations, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7  });
  console.log('encrypted   '+ encrypted  );
}



function  decrypt(encrypted){
 // var salt = CryptoJS.enc.Hex.parse("4acfedc7dc72a9003a0dd721d7642bde");
 // var iv = CryptoJS.enc.Hex.parse("69135769514102d0eded589ff874cacd");
 // var encrypted = "PU7jfTmkyvD71ZtISKFcUQ==";
  console.log('salt  '+ salt );
  console.log('iv  '+ iv );
  var key = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 128/32, iterations: 100 });
  console.log( 'key '+ key);
  var decrypt = CryptoJS.AES.decrypt(encrypted, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
  var ddd = decrypt.toString(CryptoJS.enc.Utf8); 
  console.log('ddd '+ddd);
} 

答案 1 :(得分:0)

Ajax!并在Java服务器上运行您必须执行的所有Java处理。如果secretKey每次都会更改,则可以通过base64编码传递字节并解码服务器上的字节。如果最初只需要js可用,则可以让服务器输出:

<script>myvalue = "bytes here"'</script>

进入页面以供js使用。