易盾安全键盘-Android
2024.11.25 14:16:23
本文用于指导易盾安全键盘 sdk 的接入,将以 SafeKeyBoardDemo 为例进行说明。
兼容性
条目 | 说明 |
---|---|
适配版本 | minSdkVersion 19 及以上版本 |
cpu 架构 | ARM 或者 X86 |
资源引入(AndroidStudio 开发平台)
通过 AndroidStudio 新建用户工程,将本 sdk 的 neteasesafekeyboard_encrypted.aar 放入工程对应 module 的 libs 目录(如没有该目录需新建),然后在 build.gradle 文件中增加如下代码
android{
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation(name:'neteasesafekeyboard_encrypted', ext:'aar')
implementation 'com.madgag.spongycastle:core:1.58.0.0'
implementation 'com.madgag.spongycastle:prov:1.58.0.0' // 加密库,若项目中原本存在无需添加
}
各种配置
混淆配置
在 proguard-rules.pro 文件中添加如下混淆规则
-keeppackagenames com.netease.nis.safekeyboard
-keep class com.netease.nis.safekeyboard.**{*;}
-dontwarn com.netease.nis.safekeyboard.**
-keep class com.netease.nis.sdkwrapper.**{*;}
-dontwarn com.netease.nis.sdkwrapper.**
-keep class org.spongycastle.**
-dontwarn org.spongycastle.**
快速调用示例
在 layout 布局文件中使用带安全键盘的 EditText
<com.netease.nis.safekeyboard.api.PwdEditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="50dp"
/>
压缩包里面有 Demo,替换 libs 下的 neteasesafekeyboard_encrypted.aar 即可运行
SDK 方法说明
PwdEditText 为继承系统 EditText 的文本输入控件
首先需要在最外层的 ViewGroup 定义 PwdEditText 的命名空间
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://www.netease.mobile"
/>
之后可以定义 PwdEditText 的属性,PwdEditText 支持的属性如下
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
maxLen | Number | 12 | 允许输入的最大长度 |
echo | boolean | false | 是否显示明文 |
textAutoClean | boolean | false | 再次弹出键盘是否清空前一次内容 |
popWindow | boolean | false | 是否显示小键盘 |
random | boolean | false | 键盘按键是否随机 |
keyboardType | Number | 0 | 键盘类型,0:字母,1:符号,2:数字,3:身份证 |
showOnFocus | boolean | false | focus状态是否主动弹出键盘 |
themeStyle | String | white | 主题,支持white、black两种 |
示例
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://www.netease.mobile"
>
<com.netease.nis.safekeyboard.api.PwdEditText
android:layout_width="match_parent"
android:layout_height="50dp"
app:showOnFocus="true"
app:themeStyle="white"
/>
</LinearLayout>
PwdEditText 支持的 API 如下
1.getEncValue()
获取密文
PwdEditText.getEncValue()
2.setInputFilters(List list)
过滤字符,不允许输入某些字符
PwdEditText.setInputFilters(Arrays.asList("q", "w"))
3.hideKeyboard()
隐藏键盘
PwdEditText.hideKeyboard()
4.getRawValue()
获取真实数据
PwdEditText.getRawValue()
5.setEcho(boolean isEcho)
是否显示明文
PwdEditText.setEcho(false)
6.setRawValue(CharSequence charSequence)
设置初始内容
PwdEditText.setRawValue("wq12")
7.setInputListener(InputListener inputListener)
设置输入监听器
PwdEditText.setInputListener((encrypt, original, length, maxLength) -> {
Log.i("密文", encrypt.toString());
Log.i("明文", original.toString());
Log.i("当前长度", length + "");
Log.i("最大长度", maxLength + "");
});
其他API
8.NetEaseKBSettings.setKey(SecType secType, String... strArr)
设置加密方式和对应的公钥,支持三种加密方式。加密方式定义在枚举 SecType 中
public enum SecType {
SM2("SM2 CRYPTO"),
RSA("RSA CRYPTO"),
AES("AES AND RSA CRYPTO");
SecType(String str) {
}
}
- 国密加密 SM2 此时 PwdEditText.getEncValue() 返回的密文是用 SM2 公钥加密过的,用 SM2 私钥可以解密。具体的解密代码可以查看 SM2Tools 的 decrypt 方法
- 非对称加密RSA 此时 PwdEditText.getEncValue() 返回的密文是用 RSA 公钥加密过的,用 RSA 私钥可以解密。具体的解密代码可以查看 RSATools 的 decrypt 方法
- 对称加密AES(配合非对称加密 RSA 使用) 此时 PwdEditText.getEncValue() 返回的密文是用 RSA 和 AES 混合加密过的。解密过程如下所示
String enc = PwdEditText.getEncValue();
byte[] bytes = Base64.decode(enc, Base64.URL_SAFE | Base64.NO_WRAP);
byte[] rsa_enc = Arrays.copyOfRange(bytes, 0, 64);
byte[] aes_enc = Arrays.copyOfRange(bytes, 64, bytes.length);
byte[] rsa_dec = RSATools.decrypt(privateKey, rsa_enc);
byte[] aes_iv = Arrays.copyOfRange(rsa_dec, 0, 16);
byte[] aes_key = Arrays.copyOfRange(rsa_dec, 16, rsa_dec.length);
String dec = AESTools.decrypt(aes_enc, aes_key, aes_iv);
9.NetEaseKBSettings.config(int iconId, String titleStr)
设置键盘顶部标题和图标资源id