android hxgsecurity 常用的集中加密方式封装

Java层设置key和秘钥默认偏移量

AESUtils.setJavaKey(String skey);

AESUtils.setJavaIvParameter(String ivParameter);

设置key必须为16位,可更改为自己的key,例如:

AESUtils.setJavaIvParameter(“huangxiaoguo1234”);

AESUtils.setJavaKey(“5682huangxiaoguo”);

C层设置key和秘钥默认偏移量

方式为进行NDK开发打包成.so文件,放进你当前类对应的module的libs中,

并进行build.gradle配置

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.getLocalPublicKey();

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);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

上面这些公司都是时下最受欢迎的互联网大厂,他们的职级、薪资、福利也都讲的差不多了,相信大家都是有梦想和野心的人,心里多少应该都有些想法。

也相信很多人也都在为即将到来的金九银十做准备,也有不少人的目标都是这些公司。

我这边有不少朋友都在这些厂工作,其中也有很多人担任过面试官,上面的资料也差不多都是从朋友那边打探来的。除了上面的信息,我这边还有这些大厂近年来的面试真题及解析,以及一些朋友出于兴趣和热爱一起整理的Android时下热门知识点的学习资料

部分文件:


《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

13716372284)]

最后

上面这些公司都是时下最受欢迎的互联网大厂,他们的职级、薪资、福利也都讲的差不多了,相信大家都是有梦想和野心的人,心里多少应该都有些想法。

也相信很多人也都在为即将到来的金九银十做准备,也有不少人的目标都是这些公司。

我这边有不少朋友都在这些厂工作,其中也有很多人担任过面试官,上面的资料也差不多都是从朋友那边打探来的。除了上面的信息,我这边还有这些大厂近年来的面试真题及解析,以及一些朋友出于兴趣和热爱一起整理的Android时下热门知识点的学习资料

部分文件:
[外链图片转存中…(img-rnJdEgmD-1713716372286)]
[外链图片转存中…(img-LGFkC4pW-1713716372287)]
[外链图片转存中…(img-VSZydHoo-1713716372288)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值