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) 

 

 

 

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