Java MAC加密算法的坑:signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x20

       MAC密鑰的支算法結合了MD5和SHA算法的優勢,並加入持,是一種更爲安全的消息摘要算法。

       MAC(Message Authentication Code,消息認證碼算法)是含有密鑰的散列函數算法,兼容了MD和SHA算法的特性,並在此基礎上加入了密鑰。消息的散列值由只有通信雙方知道的祕密密鑰K來控制,因次,我們也常把MAC稱爲HMAC(keyed-Hash Message Authentication Code)。

       MAC算法主要集合了MD和SHA兩大系列消息摘要算法。MD系列的算法有HmacMD2、HmacMD4、HmacMD5三種算法;SHA系列的算法有HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384.HmacSHA512五種算法。

       經過MAC算法得到的摘要值也可以使用十六進制編碼表示,其摘要值長度與參與實現的摘要值長度相同。例如,HmacSHA1算法得到的摘要長度就是SHA1算法得到的摘要長度,都是160位二進制碼,換算成十六進制編碼爲40位。
 

但是這個加密算法在多線程是不安全的  如果使用全局的Mac 就會出現crash,而且這個Crash還是C層報的錯誤,找了一天,終於找到是線程安全的問題了  所以在多線程同時使用的時候 一定不要使用全局的Mac  解決辦法:在使用的每個線程 New一個Mac的實例。也可以在每個線程中結合 ThreadLocal  這樣可以保證每個線程有一個Mac的實例  當從ThreadLocal中可以獲取到實例的時候就用該實例  如果獲取不到 那就去new 一個Mac實例  然後Set到ThreadLocal中  這樣就解決了因爲多線程造成的Java MAC加密的Crash 

2019-12-30 11:14:51.483 19250-19250/? E/DEBUG: failed to readlink /proc/19245/fd/125: No such file or directory

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG: Build fingerprint: 'samsung/dreamqltesq/dreamqltesq:9/PPR1.180610.011/G950USQS6DSJ1:user/release-keys'

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG: Revision: '12'

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG: ABI: 'arm64'

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG: pid: 19132, tid: 19245, name: monkey.cool/...  >>> cool.monkey.android <<<

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x20

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG: Cause: null pointer dereference

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG:     x0  0000000000000000  x1  0000006f381ceea8  x2  0000000000000020  x3  0000006f80ed7b00

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG:     x4  0000006f80ed7978  x5  0000006f80ed7b78  x6  0000000000000000  x7  0000000000000000

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG:     x8  000000701e21f1c0  x9  0000000000000000  x10 0000000000000000  x11 0000002000000000

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG:     x12 0000000000000000  x13 0000000000000000  x14 0000006f97f133e4  x15 0000000000000000

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG:     x16 000000701e2f4d70  x17 000000701cceaff0  x18 0000000000000008  x19 0000000000000020

2019-12-30 11:14:51.526 19250-19250/? A/DEBUG:     x20 0000000000000000  x21 0000006f381ceea8  x22 0000006f381cef38  x23 0000000000000020

2019-12-30 11:14:51.527 19250-19250/? A/DEBUG:     x24 0000006f381d3588  x25 0000006f381d3588  x26 0000006f9161fca0  x27 0000000000000001

2019-12-30 11:14:51.527 19250-19250/? A/DEBUG:     x28 0000000000000000  x29 0000006f381cee90

2019-12-30 11:14:51.527 19250-19250/? A/DEBUG:     sp  0000006f381cee60  lr  000000701e20b594  pc  000000701e21a6f8

2019-12-30 11:14:51.585 19250-19250/? A/DEBUG: backtrace:

2019-12-30 11:14:51.585 19250-19250/? A/DEBUG:     #00 pc 00000000000956f8  /system/lib64/libcrypto.so (SHA256_Update+36)

2019-12-30 11:14:51.585 19250-19250/? A/DEBUG:     #01 pc 0000000000086590  /system/lib64/libcrypto.so (HMAC_Final+124)

2019-12-30 11:14:51.585 19250-19250/? A/DEBUG:     #02 pc 000000000001a208  /system/lib64/libjavacrypto.so (NativeCrypto_HMAC_Final(_JNIEnv*, _jclass*, _jobject*)+256)

2019-12-30 11:14:51.585 19250-19250/? A/DEBUG:     #03 pc 000000000001623c  /system/framework/arm64/boot-conscrypt.oat (offset 0x16000) 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章