Android使用國密别厘,我們直接需要導(dǎo)入就搞定
implementation 'org.bouncycastle:bcpkix-jdk15to18:1.68'
implementation 'org.bouncycastle:bcprov-jdk15to18:1.68'
sm4為(原名SMS4)是中華人民共和國政府采用的一種分組密碼標(biāo)準(zhǔn)棍潘,由國家密碼管理局于2012年3月21日發(fā)布;
需要注意:
1:padding,填充
2:安卓系統(tǒng)领铐,自帶版本BouncyCastle
我主要就是這兩個地方?jīng)]注意!!局服!
第一個問題
填充,c/s兩端需要協(xié)商好驳遵,有無填充淫奔,如果是默認(rèn)的填充那無所謂。如果是無填充模式堤结,那么請記得在你的Padding設(shè)置為無填充唆迁。
例如CBC模式
private static final String ALGORITHM_CBC_NOPADDING = "SM4/CBC/NOPadding";
第二個問題
自帶版本BouncyCastle
在應(yīng)用啟動的時(shí)候鸭丛,已經(jīng)有了一個自帶版本的BCprovider被自動add進(jìn)當(dāng)前系統(tǒng),需要先移除再加入我們的版本
這個時(shí)候需要先檢查下唐责,并且清除下本地的鳞溉。代碼如下:
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", "運(yùn)行環(huán)境沒有BouncyCastleProvider");
Security.addProvider(new BouncyCastleProvider());
double version = Security.getProvider(BouncyCastleProvider.PROVIDER_NAME).getVersion();
Log.i("Sm4", "現(xiàn)有version=" + version);
}
}
問題記錄完畢;下次就不會被搞死了~