項(xiàng)目中要使用安全鍵盤(pán)顶考,又囊中羞澀無(wú)法購(gòu)買(mǎi)廠商的方案;
研究了一下妖泄,主要涉及到自定義鍵盤(pán)驹沿,輸入jni加密存儲(chǔ),全程在java內(nèi)存中不出現(xiàn)明文密碼蹈胡,以及一些禁回寫(xiě)渊季,禁截屏的操作朋蔫。
主要參考了https://blog.csdn.net/xiaoyi2412/article/details/89157025這篇文章。
但文章中給的項(xiàng)目年代相對(duì)久遠(yuǎn)却汉,并且加密方式md5也不滿足需求驯妄,所以自己重新創(chuàng)建了一個(gè)項(xiàng)目開(kāi)始修改;
一.做了如下修改:
1.使用CMake進(jìn)行jni的編譯合砂;
2. 分離出aar工程青扔,方便集成使用;
3.增加DES/ECB/PKCS7Padding的加密方式翩伪,理論上引入的算法庫(kù)可以支持的加密方式都可以做微猖,只是目前項(xiàng)目中使用的是這種;
4.在加密庫(kù)選擇上缘屹,main分支選擇在c層使用jni回調(diào)java層的bouncycastle庫(kù)励两;openssl分支選擇在c層直接使用openssl的crypto加密庫(kù)進(jìn)行加密;
5.刪除了一些無(wú)用的圖片資源
二.修改后發(fā)布的項(xiàng)目地址如下:
https://github.com/hyy12345678/SKeyboard
main分支在c層通過(guò)jni回調(diào)java層算法庫(kù)進(jìn)行加密囊颅,理論上明文在jni回調(diào)時(shí)還是會(huì)出現(xiàn)在java內(nèi)存中。
openssl分支在c++層使用openssl的加密庫(kù)算法傅瞻,實(shí)現(xiàn)真正意義的在java內(nèi)存中不出現(xiàn)密碼明文踢代。