android怎样生成固定的aes密钥,是否可以生成一个64字节(256位)的密钥并使用androidkeystore存储/检索它?...

在我的Android应用程序中,我需要一种方法来加密我存储在本地数据库中的数据。

我选择领域数据库是因为它提供了与加密的无缝集成。初始化领域实例时只需要传递一个密钥。此密钥的大小必须为64字节。

出于安全原因,我发现存储这个密钥的最佳方法是在androidkeystore中。我正在努力寻找一种方法来生成具有这种大小的密钥(使用任何算法),并将其放入一个64字节的数组中。我正在尝试保留API 19的minsdk,但我相信如果需要的话,我可以将其提升到23(这两个版本之间对androidkeystore的许多更改)。

有人有主意吗?这是我的代码:

类加密.java

private static KeyStore ks = null;

private static String ALIAS = "com.oi.pap";

public static byte[] loadkey(Context context) {

byte[] content = new byte[64];

try {

if (ks == null) {

createNewKeys(context);

}

ks = KeyStore.getInstance("AndroidKeyStore");

ks.load(null);

content= ks.getCertificate(ALIAS).getEncoded(); //

Log.e(TAG, "original key :" + Arrays.toString(content));

} catch (KeyStoreException | CertificateException | IOException | NoSuchAlgorithmException e) {

e.printStackTrace();

}

content = Arrays.copyOfRange(content, 0, 64); //

return content;

}

private static void createNewKeys(Context context) throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException {

ks = KeyStore.getInstance("AndroidKeyStore");

ks.load(null);

try {

// Create new key if needed

if (!ks.containsAlias(ALIAS)) {

Calendar start = Calendar.getInstance();

Calendar end = Calendar.getInstance();

end.add(Calendar.YEAR, 1);

KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(context)

.setAlias(ALIAS)

.setSubject(new X500Principal("CN=PapRealmKey, O=oipap"))

.setSerialNumber(BigInteger.ONE)

.setStartDate(start.getTime())

.setEndDate(end.getTime())

.setKeySize(256)

.setKeyType(KeyProperties.KEY_ALGORITHM_EC)

.build();

KeyPairGenerator generator = KeyPairGenerator

.getInstance(KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");

generator.initialize(spec);

KeyPair keyPair = generator.generateKeyPair();

Log.e(TAG, "generated key :" + Arrays.toString(keyPair.getPrivate().getEncoded()));

}

} catch (Exception e) {

Log.e(TAG, Log.getStackTraceString(e));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值