Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在Android Keystore中使用密钥哈希消息认证码(HMAC)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究使用适用于Marshmallow及以上版本的 Android KeyStore.

我想通过使用HMAC来同时验证数据的完整性和数据的身份验证.

我该如何实现这一目标?

我目前正在生成加密/解密密钥,如下所示: –

@H_247_8@mKeyStore = KeyStore.geTinstance(keyStoreName); mKeyStore.load(mKeyStoreLoadStoreParameter); if (mKeyStore.containsAlias(keyStoreAlias)) { mSecretKey = (SecretKey) mKeyStore.getKey(keyStoreAlias,KEY_STORE_password); } else { final KeyGenerator keyGenerator = KeyGenerator.geTinstance(KeyProperties.KEY_ALGORITHM_AES,keyStoreName); final int keyPurpose = KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT; keyGenerator.init( new KeyGenParameterSpec.builder(keyStoreAlias,keyPurposE) .setKeySize(KEY_STORE_KEY_SIZE) .setBlockmodes(KeyProperties.bLOCK_MODE_GCM) .setRandomizedEncryptionrequired(true) .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) .build()); mSecretKey = keyGenerator.generateKey();

我发现这个样本用于生成HMAC

SecretKey key = ...; // HMAC key of algorithm "HmacSHA512".

 KeyStore keyStore = KeyStore.geTinstance("AndroidKeyStore");
 keyStore.load(null);
 keyStore.setEntry(
         "key1",new KeyStore.SecretKeyEntry(key),new KeyProtection.builder(KeyProperties.PURPOSE_SIGN).build());
 // Key imported,obtain a reference to it.
 SecretKey keyStoreKey = (SecretKey) keyStore.getKey("key1",null);
 // The original key can Now be discarded.

 Mac mac = Mac.geTinstance("HmacSHA512");
 mac.init(keyStoreKey);

但是,在加密/解密数据时如何使用它?

说明

在任何Android应用程序中实现安全/加密时,我有许多选择/决定.

1).我是否实施任何类型的加密是或否?
2).如果是,那么…我应该尝试实现“最”安全​​的解决方案.

如果我要使用加密技术,那么我需要确保以下内容.

一个).我将密码/密钥存储在“安全的地方”,例如Android密钥库.
B).我使用“最强”的加密技术.
C).我想同时验证数据完整性和数据验证,例如我想检测一下我的加密数据是否被篡改过.

据我了解我所读到的关于HMAC的内容,他们提供了这项功能.我想知道如何将HMAC的使用编码到我的Android应用程序中,以确保数据完整性和数据身份验证.

解决方法

您可以在加密前将HMAC应用于纯文本HMAC(纯文本),并在解密后重新计算HMAC以检查原始消息是否相同.

它可能是多余的,因为如果密文被更改,您将无法解密它.

首先在AndroidKeyStore中生成HMAC密钥.我找到了一个例子here

KeyGenerator keyGenerator = KeyGenerator.geTinstance(
         KeyProperties.KEY_ALGORITHM_HMAC_SHA256,"AndroidKeyStore");
keyGenerator.initialize(
         new KeyGenParameterSpec.builder(hmacKeyAlias,KeyProperties.PURPOSE_SIGN).build());
SecretKey key = keyGenerator.generateKey();

然后将HMAC应用于原始数据并将结果存储在某

@H_247_8@mac mac = Mac.geTinstance("HmacSHA256"); mac.init(key); byte hmacOriginalData[] = mac.doFinal(dataToEncrypt); //Store hmacOriginalData

解密后,从AndroidKeyStore获取HMAC密钥,重新计算HMAC并检查两个mac是否相等

Key key = keyStore.getKey(hmacKeyAlias,null);
Mac mac = Mac.geTinstance("HmacSHA256");
mac.init(key);
byte hmacDecryptedData[] = mac.doFinal(decryptedData);
//check equals(hmacDecryptedData,hmacOriginalData);

大佬总结

以上是大佬教程为你收集整理的如何在Android Keystore中使用密钥哈希消息认证码(HMAC)全部内容,希望文章能够帮你解决如何在Android Keystore中使用密钥哈希消息认证码(HMAC)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。