国密sm4加密算法使用记录

Android使用国密,我们直接需要导入就搞定

implementation 'org.bouncycastle:bcpkix-jdk15to18:1.68'
implementation 'org.bouncycastle:bcprov-jdk15to18:1.68'

sm4为(原名SMS4)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布;
需要注意:
1:padding,填充
2:安卓系统,自带版本BouncyCastle

我主要就是这两个地方没注意!!!

第一个问题
填充,c/s两端需要协商好,有无填充,如果是默认的填充那无所谓。如果是无填充模式,那么请记得在你的Padding设置为无填充。
例如CBC模式
private static final String ALGORITHM_CBC_NOPADDING = "SM4/CBC/NOPadding";

第二个问题
自带版本BouncyCastle
在应用启动的时候,已经有了一个自带版本的BCprovider被自动add进当前系统,需要先移除再加入我们的版本
这个时候需要先检查下,并且清除下本地的。代码如下:

static {
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) != null) {
double version = Security.getProvider(BouncyCastleProvider.PROVIDER_NAME).getVersion();
Log.i("Sm4", "原有version=" + version);
Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME);

}
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
    Log.i("Sm4", "运行环境没有BouncyCastleProvider");
    Security.addProvider(new BouncyCastleProvider());
    double version = Security.getProvider(BouncyCastleProvider.PROVIDER_NAME).getVersion();
    Log.i("Sm4", "现有version=" + version);
}

}

问题记录完毕;下次就不会被搞死了~

你可能感兴趣的:(国密sm4加密算法使用记录)