写点什么

android hxgsecurity 常用的集中加密方式封装,android 项目开发案例

用户头像
Android架构
关注
发布于: 1 小时前

android {


...


sourceSets {


main {


jniLibs.srcDirs = ['libs']


}


}


}


jni 对应的包名为 cn.tsou.lib_security.aes


jni 对应的获取 key 的方法名为 getKey()


jni 对应的获取 IvParameter 的方法名为 getIvParameter()


如下 JNI 简例:


#include <jni.h>


//JNIEXPORT jstring JNICALL


jstring Java_cn_tsou_lib_1security_aes_AEScbc_getKey(JNIEnv


*env, jobject instance) {


return (*env)->NewStringUTF(env, "huangxiaoguo1234");


}


jstring Java_cn_tsou_lib_1security_aes_AEScbc_getIvParameter(JNIEnv


*env, jobject instance) {


return (*env)->NewStringUTF(env, "1234huangxiaoguo");


}


检查你设置的 key 和 IvParameter 是否生效的 Log 日志筛选 tag 条件为:huangxiaoguo


AES 加密


AESUtils.getInstance().encrypt(String plaintext);


AES 解密


AESUtils.getInstance().decrypt(String ciphertext_base64);

RSA 加密解密

创建一个公共和私人密钥,并将其存储使用 Android 密钥存储库中,因此,只有


这个应用程序将能够访问键。


使用之前请先初始化 RSAinit


最好放在启动页初始化需要一些时间


private RSAPublicKey publicKey = RSAinit.initRSA(this, null, null, 0, null);


initRSA 参数介绍


initRSA(Context context,String pcksPadding,String split,int keySize,String alias);


context:上下文


pcksPadding: 加密填充方式 传 null,默认:"RSA/ECB/PKCS1Padding"


split: 当要加密的内容超过 bufferSize,则采用 partSplit 进行分块加密,


传 null,默认:"#HUANGXIAOGUO#"


keySize: 秘钥默认长度,传 0,默认:2048


alias: 自己给你的别名,方便在 keystore 中查找秘钥,传 null,默认:"xiaoGuoKey"


获取客户端公钥的 base64 编码的 String,登录时将公钥传递给后台


String localPublicKey = EncodeUtils.base64Encode2String(publicKey.getEncoded());


用公钥对字符串进行加密(一般使用公钥进行加密)


AndroidKeyStoreRSAUtils.encryptByPublicKey(byte[] data, byte[] publicKey);


简例:


byte[] encryptBytes = AndroidKeyStoreRSAUtils.encryptByPublicKey(encryptionRSAString.getBytes(),


publicKey.getEncoded());


String encryStr = Base64Encoder.encode(encryptBytes);


私钥加密


AndroidKeyStoreRSAUtils.encryptByPrivateKey(byte[] data, byte[] privateKey);


公钥解密


AndroidKeyStoreRSAUtils.decryptByPublicKey(byte[] data, byte[] publicKey);


使用私钥进行解密(一般使用私钥进行解密)


AndroidKeyStoreRSAUtils.decryptByPrivateKey(byte[] encrypted);


简例:


byte[] decryptBytes = AndroidKeyStoreRSAUtils.decryptByPrivateKey(Base64Decoder.decodeToBytes(decodeRSAString));


mTvRsaDecode.setText(new String(decryptBytes));


用公钥对字符串进行分段加密


AndroidKeyStoreRSAUtils.encryptByPublicKeyForSpilt(byte[] data, byte[] publicKey);


私钥分段加密


AndroidKeyStoreRSAUtils.encryptByPrivateKeyForSpilt(byte[] data, byte[] privateKey);


公钥分段解密


AndroidKeyStoreRSAUtils.decryptByPublicKeyForSpilt(byte[] encrypted, byte[] publicKey);


使用私钥分段解密


AndroidKeyStoreRSAUtils.decryptByPrivateKeyForSpilt(byte[] encrypted);


通过字符串生成私钥,转换服务器传递过来的私钥


AndroidKeyStoreRSAUtils.getPrivateKey(String privateKeyData);


通过字符串生成公钥,转换服务器传递过来的公钥


AndroidKeyStoreRSAUtils.getPublicKey(String publicKeyData);


判断是否创建过秘钥


AndroidKeyStoreRSAUtils.isHaveKeyStore();


获得本地 AndroidKeyStore 中的公钥


AndroidKeyStoreRSAUtils.getLocalPublicK


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


ey();

RSA 签名验证

使用之前请先初始化 RSAinit


###### 签名


AndroidKeyStoreRSAUtils.signData(String inputStr);


###### 校验签名的字符串


boolean b = AndroidKeyStoreRSAUtils. verifyData(String input, String signatureStr);


if (b) {


mTvRsaVerify.setText("签名一致");


} else {


mTvRsaVerify.setText("签名不一致");


}

SP 加密存储(使用的是 RSA)

使用之前请先初始化 RSAinit


SP 存入


SPSecuredUtils.put(Context context, String key, Object object, RSAPublicKey publicKey);


简例:


SPSecuredUtils.put(this, "huangxiaoguo", encryptionSpString, publicKey);


SPSecuredUtils.put(this, "huangxiaoguo1", 1, publicKey);


SPSecuredUtils.put(this, "huangxiaoguo2", 0.01, publicKey);


SPSecuredUtils.put(this, "huangxiaoguo3", true, publicKey);


SP 读取


SPSecuredUtils.get(Context context, String key, Object defaultObject);


String huangxiaoguo = (String) SPSecuredUtils.get(this, "huangxiaoguo", "");


int huangxiaoguo1 = (int) SPSecuredUtils.get(this, "huangxiaoguo1", 0);


double huangxiaoguo2 = (double) SPSecuredUtils.get(this, "huangxiaoguo2", 0.0);


boolean huangxiaoguo3 = (boolean) SPSecuredUtils.get(this, "huangxiaoguo3", false);


将对象储存到 sharepreference


SPSecuredUtils.saveDeviceData(Context context, String key, T device, RSAPublicKey publicKey);


将对象从 shareprerence 中取出来


SPSecuredUtils.getDeviceData(Context context, String key)


移除某个 key 值已经对应的值


SPSecuredUtils.remove(Context context, String key);


清除所有数据


SPSecuredUtils.clear(Context context);


查询某个 key 是否已经存在

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
android hxgsecurity 常用的集中加密方式封装,android项目开发案例