gpt4 book ai didi

java - Base64编码js问题

转载 作者:行者123 更新时间:2023-12-01 14:43:47 25 4
gpt4 key购买 nike

我正在使用 AES 来加密和解密我的密码。我想要实现的是,我需要以 cookie 的形式在客户端存储加密密码,然后当客户端再次登录我的网站时,我需要从客户端获取加密密码并解密它根据客户端提供的未加密密码进行检查。我面临的问题是,在加密时,我使用java中的 BASE64.encodeString() 将加密密码的字节数组转换为字符串,以便将其传递到客户端。但是,当我从客户端(即从 cookie 获取相同的字符串)并尝试解密它时,它会给我填充错误,即 javax.crypto.illegalBlockSizeException :使用填充密码解密时,输入长度必须是 16 的倍数。

为什么会发生这种情况?

加密代码:

  Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivspec);
byte[] plainBytes = Data.getBytes(UNICODE_FORMAT);
byte[] encrypted = cipher.doFinal(plainBytes);
String encryption = Base64.encodeBase64String(encrypted);
return encryption;

解密代码:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec);
byte[] decryptval = Base64.decodeBase64(encryptedData);
byte[] decrypted = cipher.doFinal(decryptval);
return new String(decrypted);

错误是因为我将加密的字符串传递给js以存储在cookie中吗?? JS 是否会修改 base64 编码的字符串?

最佳答案

强烈建议不要使用密码来存储/传输密码。

哈希函数是一个更安全的想法。密码和哈希之间的区别在于密码是可逆的,而哈希是一种方式(明文 -> 哈希文本)。从安全 Angular 来看,以 a) 明文或 b) 加密方式将用户密码存储在服务器上是一个很大的禁忌。

另一方面,哈希值不能逆转; (至少理论上)

使用 MessageDigest 类可以轻松完成简单的哈希

获取哈希值非常简单:

Message Digest md = MessageDigest.getInstance("MD5");
md.digest(input.getBytes());

然后,客户端可以对明文密码进行哈希处理,并将其发送到服务器。然后,服务器可以比较哈希值进行身份验证,并将 session token 返回给用户,用户可以在 session 的其余部分使用该 token ,而无需到处传输密码。

关于java - Base64编码js问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15675416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com