【发布时间】:2013-10-29 03:21:14
【问题描述】:
我被要求在将某些文本从客户端 (web) 发送到服务器端 (java) 之前对其进行加密
所以我尝试在客户端使用 CryptoJS 库。 我这样加密它:
var key = "aaaaaaaaaaaaaaaaaaaaaaaa";
var value = "KF169841";
var encryptedString = CryptoJS.TripleDES.encrypt(value, key);
console.log(encryptedString.toString());
我得到这样的东西:U2FsdGVkX19eYFFHgYGCr3v9/skTOKVp0pLWRNK9JTg= 我在其他Decrypt tool online(也使用 CryptoJS)中使用了这个 encryptedString 和密钥,并得到了 KF169841 的确切值。
将此值和密钥发送到服务器后(虽然密钥不是直接发送到服务器,但为了测试,它是),我需要使用 Java 对其进行解密。 但我完全不知道如何解密它。我从谷歌搜索中尝试了一些代码,但如果使用 DESese,它最终会出现错误的填充,或者如果我使用 ECB/NoPadding,则会得到错误的值。 我确实尝试过为 CryptoJS 端设置 sfg 之类的东西:
mode: CryptoJS.mode.EBC,
padding: CryptoJS.pad.NoPadding
但是他们得到了 javascript 异常(a 没有定义)
那么任何有 CryptoJS 经验的人都可以帮助我使用 java 解密这个吗?
================================================ ===============
更新:对不起,我正在使用我的服务器端代码
/**
* Method To Decrypt An Ecrypted String
*/
public String decrypt(String encryptedString, String myEncryptionKey) {
String decryptedText = null;
try {
byte[] keyAsBytes = myEncryptionKey.getBytes("UTF8");
KeySpec myKeySpec = new DESedeKeySpec(keyAsBytes);
SecretKeyFactory mySecretKeyFactory =
SecretKeyFactory.getInstance("DESede");
Cipher cipher = Cipher.getInstance("DESede/ECB/NoPadding");
SecretKey key = mySecretKeyFactory.generateSecret(myKeySpec);
cipher.init(Cipher.DECRYPT_MODE, key);
// BASE64Decoder base64decoder = new BASE64Decoder();
// byte[] encryptedText = base64decoder.decodeBuffer(encryptedString);
byte[] encryptedText = org.apache.commons.codec.binary.Base64.decodeBase64(encryptedString);
byte[] plainText = cipher.doFinal(encryptedText);
decryptedText= bytes2String(plainText);
} catch (Exception e) {
e.printStackTrace();
}
return decryptedText;
}
【问题讨论】:
-
欢迎来到 StackOverflow。您使用的是 Java 还是 Javascript?它们不是一回事。
-
我在客户端使用javascript(使用CryptoJS lib)来加密它对于服务器端我需要使用Java使用密钥解密值
-
@ChristianTernus:两者都有。
-
好的,很酷;我们可以看看你目前的 Java 代码吗?
-
encryptedString是一个 JSON 对象。您需要先从 JSON 对象中提取密文,然后才能进行解密。
标签: java encryption tripledes cryptojs