【发布时间】:2016-01-14 10:55:49
【问题描述】:
我正在使用 Base64 加密从 JAVA 代码发送到 Angular 的令牌:
String token = "1345BCHCNB";
Cipher ecipher = Cipher.getInstance("AES");
String mykey = "1234567891234567";
SecretKey key = new SecretKeySpec(mykey.getBytes(), "AES");
ecipher.init(Cipher.ENCRYPT_MODE, key);
byte[] utf8 = token.getBytes("UTF-8");
byte[] enc = ecipher.doFinal(utf8);
String enctoken = Base64.encodeBase64(enc).toString());
现在我想在 Angular 端解密它。我无法弄清楚如何将其转换回实际令牌
【问题讨论】:
-
您使用 AES 进行加密。 Base64 不加密任何东西。到目前为止,您尝试过什么?
-
请记住,在不安全的通道 (HTTP) 上使用对称加密只是有点混淆,并不能提供任何真正的安全性。如果你使用 HTTPS,那么你可以直接发送你的令牌而不加密它。查看更多:Javascript Cryptography Considered Harmful
-
Stack Overflow 不是代码翻译服务。选择一个支持 AES encryption 和 Base64 encoding 的库并尝试自己复制它。如果你遇到问题,那么你可以提出一个具体的问题。
-
@ArtjomB。您可能想要扩展:“在不安全的通道 (HTTP) 上使用对称加密只是一点点混淆,并且不提供任何真正的安全性”,考虑到 https 使用对称加密发送数据。我觉得这种说法过于笼统。当然,使用 HTTPS 是更好地满足用户需求的解决方案。
-
@zaph 是的,你是对的。我忘记了“only”这个小词。 Rajat 的澄清:如果用于加密某些数据的对称密钥与密文一起发送,那么观察流量的攻击者可以轻松地使用该密钥来解密嗅探到的密文。另一方面,如果对称密钥与非对称加密(RSA,Diffie-Hellman)正确共享,则不必以明文形式发送给客户端,因此可以提供适当的安全性。可能还有其他攻击可能,因此最好使用经过审查的原语,例如 TLS。
标签: javascript java angularjs encryption