易盾安全键盘-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

    Online Chat Tel:95163223 Free trial