AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它提供了多种工作模式,如ECB(Electronic Codebook)、CBC(Cipher Block Chaining)和GCM(Galois/Counter Mode)。每种模式都有其特定的用途和优缺点。本文将详细讨论这些模式,以及如何在Java中实现AES加解密,同时分析它们的适用场景和注意事项。
2024年09月01日
AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它提供了多种工作模式,如ECB(Electronic Codebook)、CBC(Cipher Block Chaining)和GCM(Galois/Counter Mode)。每种模式都有其特定的用途和优缺点。本文将详细讨论这些模式,以及如何在Java中实现AES加解密,同时分析它们的适用场景和注意事项。
2024年09月01日
多次被问到这样的问题:
java服务端的rsa加密操作已经完成,返回一个16进制的字符串给python平台,但是在python进行私钥解密的时候发现行不通。。。。
前端python加密,后端用java解密,解不出来
还有诸如nodejs
从理论上来说,rsa加密的基础都是一样的,不存在一个语言加密,另一个语言解密不出来的情况。那出问题的只能是我们使用的方法不对。
2024年09月01日
数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法
2024年09月01日
RSA是一种常用的非对称加密算法,加密和加密使用不同的密钥,常用于要求安全性较高的加密场景,比如接口的验签和接口数据的加密与解密。与非对称加密算法对比,其安全性较高,但是加密性能却比较低,不适合高并发场景,一般只加密少量的数据。
2024年09月01日
欢迎转载:攻城狮不是猫 求保留连接
import com.alibaba.fastjson.JSON; import org.apache.commons.codec.binary.Base64; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.*; import java.util.HashMap; import java.util.Map; /**AES 是一种可逆加密算法,对用户的敏感信息加密处理 * 对原始数据进行AES加密后,在进行Base64编码转化; */ public class AesCBC { public static boolean initialized = false; /** * AES解密 * @param content 密文 * @return * @throws InvalidAlgorithmParameterException * @throws NoSuchProviderException */ public static byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) throws InvalidAlgorithmParameterException { initialize(); try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); Key sKeySpec = new SecretKeySpec(keyByte, "AES"); cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));// 初始化 byte[] result = cipher.doFinal(content); return result; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * 微信小程序用户信息解密 * @param encryptedData * @param sessionKey * @param iv * @return */ public static String decrypt(String encryptedData, String sessionKey, String iv){ try { byte[] resultByte = decrypt(Base64.decodeBase64(encryptedData), Base64.decodeBase64(sessionKey), Base64.decodeBase64(iv)); if(null != resultByte && resultByte.length > 0){ String info = new String(resultByte, "UTF-8"); return info; } } catch (Exception e) { e.printStackTrace(); } return null; } public static void initialize(){ if (initialized) return; Security.addProvider(new BouncyCastleProvider()); initialized = true; } //生成iv public static AlgorithmParameters generateIV(byte[] iv) throws Exception{ AlgorithmParameters params = AlgorithmParameters.getInstance("AES"); params.init(new IvParameterSpec(iv)); return params; } public static void main(String[] args) { String encryptedData, sessionKey, iv, appId; encryptedData = "CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZM"+ "QmRzooG2xrDcvSnxIMXFufNstNGTyaGS"+ "9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+"+ "3hVbJSRgv+4lGOETKUQz6OYStslQ142d"+ "NCuabNPGBzlooOmB231qMM85d2/fV6Ch"+ "evvXvQP8Hkue1poOFtnEtpyxVLW1zAo6"+ "/1Xx1COxFvrc2d7UL/lmHInNlxuacJXw"+ "u0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn"+ "/Hz7saL8xz+W//FRAUid1OksQaQx4CMs"+ "8LOddcQhULW4ucetDf96JcR3g0gfRK4P"+ "C7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB"+ "6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns"+ "/8wR2SiRS7MNACwTyrGvt9ts8p12PKFd"+ "lqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYV"+ "oKlaRv85IfVunYzO0IKXsyl7JCUjCpoG"+ "20f0a04COwfneQAGGwd5oa+T8yO5hzuy"+ "Db/XcxxmK01EpqOyuxINew=="; sessionKey = "tiihtNczf5v6AKRyjwEUhQ=="; iv = "r7BXXKkLb8qrSNn05n0qiA=="; appId = "wx4f4bc4dec97d474b"; String info = decrypt(encryptedData, sessionKey, iv); System.out.println(info); Map<String, Object> map = new HashMap<>(); map.put("encryptedData", encryptedData); map.put("sessionKey", sessionKey); map.put("iv", iv); map.put("appId", appId); Map<String, Object> map1 = new HashMap<>(); map1.put("wxapplet", map); String wxapplet = JSON.toJSON(map1).toString(); System.out.println(wxapplet); } }
2024年09月01日
JAVA 语言AES CBC模式加解密数据实现
在多可文档系统中文件接口需要和其他系统实现用户统一登录,其他数据加密传输,要保障算法和数据的一致性对系统接口使用有很大帮助。系统选择使用AES加密算法的CBC模式(128位密钥),实现各系统间加密数据的传输。多可提供各种语言的算法实现,以下是JAVA语言的具体算法实现(其他语言参考博主相关文章):
2024年09月01日
前言:
最近公司做一个支付宝小程序项目,用支付宝userId做唯一用户id,后台encryptedData解密出用户支付宝绑定的手机号信息,其中
正文开始:
贴代码:
1.authtoken获取userId 前端文档 后端文档
public String findUserId(String authCode) throws AdminException, AlipayApiException {