本文主要是介绍ASC+Base64加密算法 根据用户id生成秘钥,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
需要是要根据用户的id生成密钥 通过密钥生成免登录链接 实现用户根据链接直接访问系统
标准Base64编码包含特殊字符,会被转义 从而登录失败要使生成的密文不包含特殊字符,您可以使用Base64URL编码代替标准的Base64编码。Base64URL编码使用'-'和'_'替换了标准Base64编码中的'+'和'/',并且省略了末尾的'='。这样就可以避免生成的密文包含特殊字符。
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESUtils {
public static String encryptLongId(long id, String key) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(String.valueOf(id).getBytes());
return base64UrlEncode(encryptedBytes);
}
public static Long decryptLongId(String encryptedId, String key) throws Exception {
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(base64UrlDecode(encryptedId));
return Long.parseLong(new String(decryptedBytes));
}
public static void main(String[] args) throws Exception {
for (Long i = 116L; i < 500L; i++) {
String secretKey = "7987489ABCDEFG";
String encryptedId = encryptLongId(i, secretKey);
System.out.println("Encrypted ID: " + encryptedId);
Long decryptedId = decryptLongId(encryptedId, secretKey);
System.out.println("Decrypted ID: " + decryptedId);
}
}
// Base64URL编码
private static String base64UrlEncode(byte[] bytes) {
return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes);
}
// Base64URL解码
private static byte[] base64UrlDecode(String str) {
return Base64.getUrlDecoder().decode(str);
}
}
这篇关于ASC+Base64加密算法 根据用户id生成秘钥的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!