Android端的AES、MD5、SHA、RSA、SM2、SM3、SM4加解密算法的封装使用
添加依赖
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}dependencies {
implementation 'com.github.mtjsoft:lib_encryption:1.4.0'
}使用示例
public class ExampleUnitTest { /** * AES对称加密 */ public void aesTest() { byte[] key = AESUtil.generateKey(); System.out.println("key: " + Util.byte2HexStr(key)); String dataString = "我是测试aesTest明文"; System.out.println("明文:$dataString"); byte[] encrypt = AESUtil.encrypt(dataString.getBytes(), key); String encryptHexStr = Util.byte2HexStr(encrypt); System.out.println("AES加密: " + encryptHexStr); String decryptHexStr = new String(AESUtil.decrypt(encrypt, key)); System.out.println("AES解密: " + decryptHexStr); } /** * BASE64编码 */ public void base64Test() { String dataString = "我是测试base64Test明文"; System.out.println("明文:$dataString"); String encode = Base64Util.encode(dataString.getBytes()); System.out.println("base64编码: " + encode); System.out.println("base64解码: " + new String(Base64Util.decode(encode))); } /** * MD5摘要 */ public void md5Test() { String dataString = "我是测试md5Test明文"; System.out.println("明文:" + dataString); System.out.println("md5摘要: " + MD5Util.stringMD5(dataString)); } /** * SHA */ public void shaTest() { String dataString = "我是测试shaTest明文"; System.out.println("明文:" + dataString); System.out.println("sha1摘要: " + SHAUtil.stringSHA(dataString, SHAUtil.SHA1)); System.out.println("sha256摘要: " + SHAUtil.stringSHA(dataString, SHAUtil.SHA256)); } /** * RSA非对称加密 */ public void rsaTest() throws Exception { String dataString = "我是测试rsaTest明文"; System.out.println("明文:" + dataString); KeyPair key = RSAUtil.generateRSAKeyPair(); // 获取公私钥 PrivateKey privateKey = key.getPrivate(); PublicKey publicKey = key.getPublic(); byte[] encryptByPublicKey = RSAUtil.encryptByPublicKey(dataString.getBytes(), publicKey); System.out.println("公钥加密明文:" + Util.byte2HexStr(encryptByPublicKey)); System.out.println("私钥解密:" + new String(RSAUtil.decryptByPrivateKey(encryptByPublicKey, privateKey))); byte[] encryptByPrivateKey = RSAUtil.encryptByPrivateKey(dataString.getBytes(), privateKey); System.out.println("私钥加密明文:" + Util.byte2HexStr(encryptByPrivateKey)); System.out.println("公钥解密:" + new String(RSAUtil.decryptByPublicKeyKey(encryptByPrivateKey, publicKey))); byte[] signWithSHA256 = RSAUtil.signWithSHA256(dataString.getBytes(), privateKey); System.out.println("私钥对明文数据SHA256签名:" + Util.byte2HexStr(signWithSHA256)); byte[] signWithMD5 = RSAUtil.signWithMD5(dataString.getBytes(), privateKey); System.out.println("私钥对明文数据MD5签名:" + Util.byte2HexStr(signWithMD5)); boolean verifySignWithSHA256 = RSAUtil.verifySignWithSHA256(dataString.getBytes(), signWithSHA256, publicKey); System.out.println("公钥对SHA256签名验签:" + verifySignWithSHA256); boolean verifySignWithMD5 = RSAUtil.verifySignWithMD5(dataString.getBytes(), signWithMD5, publicKey); System.out.println("公钥对MD5签名验签:" + verifySignWithMD5); } /** * 国产SM2非对称加密 */ @Test public void sm2Test() { String dataString = "我是测试sm2Test明文"; System.out.println("明文:" + dataString); // 获取随机的公私钥 byte[][] key = SM2Util.generateKeyPair(); byte[] publicKey = key[0]; byte[] privateKey = key[1]; System.out.println("私钥:" + privateKey.length + " " + Util.byte2HexStr(privateKey)); System.out.println("公钥:" + Util.byte2HexStr(publicKey)); byte[] encryptByPublicKey = SM2Util.encrypt(publicKey, dataString.getBytes()); System.out.println("公钥加密明文:" + Util.byte2HexStr(encryptByPublicKey)); System.out.println("私钥解密:" + new String(SM2Util.decrypt(privateKey, encryptByPublicKey))); byte[] sign = SM2Util.sign(privateKey, encryptByPublicKey); System.out.println("签名:" + Util.byte2HexStr(sign)); boolean verifySign = SM2Util.verifySign(publicKey, encryptByPublicKey, sign); System.out.println("验签:" + verifySign); } /** * 国产SM3摘要 */ public void sm3Test() { String dataString = "我是测试sm3Test明文"; System.out.println("明文:" + dataString); System.out.println("sm3摘要: " + SM3Util.encryptInner(dataString)); } /** * 国产SM4对称加密 */ public void sm4Test() { String dataString = "我是测试sm4Test明文"; System.out.println("明文:" + dataString); byte[] key = SM4Util.createSM4Key(); System.out.println("密钥:" + Util.byte2HexStr(key)); byte[] encryptCBC = SM4Util.encrypt(dataString.getBytes(), key, SM4Util.SM4_CBC_PKCS5, new byte[16]); System.out.println("CBC加密:" + Util.byte2HexStr(encryptCBC)); System.out.println("CBC解密:" + new String(SM4Util.decrypt(encryptCBC, key, SM4Util.SM4_CBC_PKCS5, new byte[16]))); byte[] encryptECB = SM4Util.encrypt(dataString.getBytes(), key, SM4Util.SM4_ECB_PKCS5, null); System.out.println("ECB加密:" + Util.byte2HexStr(encryptECB)); System.out.println("ECB解密:" + new String(SM4Util.decrypt(encryptECB, key, SM4Util.SM4_ECB_PKCS5, null))); } }