我正在尝试使用由Android KeyStore Provider生成的私有代码在Android中实现ECDH.

public byte[] ecdh(PublicKey otherPubKey) throws Exception {

try {

ECPublicKey ecPubKey = (ECPublicKey) otherPubKey;

KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH");

PrivateKey pk = (PrivateKey) LoadPrivateKey("Backend");

keyAgreement.init(pk);

keyAgreement.doPhase(ecPubKey, true);

return (keyAgreement.generateSecret());

}

catch (Exception e)

{

Log.e("failure", e.toString());

return null;

}

}

但是,此异常在keyAgreement.init(pk)中捕获:

E/failure: java.security.InvalidKeyException: cannot identify EC private key: java.security.InvalidKeyException: no encoding for EC private key

我使用以下命令成功生成了“后端”公钥/私钥对:

public void GenerateNewKeyPair(String alias)

throws Exception {

if (!keyStore.containsAlias(alias)) {

// use the Android keystore

KeyPairGenerator keyGen = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, ANDROID_KEYSTORE);

keyGen.initialize(

new KeyGenParameterSpec.Builder(

alias,

KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY | KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)

.setAlgorithmParameterSpec(new ECGenParameterSpec("secp256r1"))

.setDigests(KeyProperties.DIGEST_SHA256,

KeyProperties.DIGEST_SHA384,

KeyProperties.DIGEST_SHA512)

.setRandomizedEncryptionRequired(true)

.build());

// generates the keypair

KeyPair keyPair = keyGen.generateKeyPair();

}

}

然后使用以下命令加载私钥:

public PrivateKey LoadPrivateKey(String alias) throws Exception {

PrivateKey key = (PrivateKey) keyStore.getKey(alias, null);

return key;

}

任何人都知道发生了什么事,可以帮助我了解如何解决它?谢谢!

解决方法:

据我通过研究和反复试验所知,目前尚不支持此功能.

我认为最好的办法是使用存储在AndroidKeyStore中的EC密钥对在AndroidKeyStore外部生成的EC密钥对的公钥进行签名.然后,您可以使用签名密钥证书将此签名的公共密钥发送给另一方,生成共享密钥(在AndroidKeyStore外部),然后在生成的密钥上存储使用KDF派生的SecretKey.我建议一次使用此非AndroidKeyStore生成的密钥对(因此仅出于导出机密的目的),并在认为必要时重复此过程以重新密钥.

编辑:当我说“存储SecretKey”时,我的意思是在AndroidKeyStore中.在这种情况下,该密钥最初将位于所谓的“正常世界”中,但是您现在可以做到最好.

标签:keystore,java,android

来源: https://codeday.me/bug/20191111/2017212.html

java ecdh_java-ECDH使用Android KeyStore生成的私钥相关推荐

  1. ECDH KDF java_java-ECDH使用Android KeyStore生成的私钥

    我正在尝试使用由Android KeyStore Provider生成的私有代码在Android中实现ECDH. public byte[] ecdh(PublicKey otherPubKey) t ...

  2. java keystore生成,探讨如何生成keystore

    原标题:探讨如何生成keystore 什么是keystore Keytool是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keysto ...

  3. keystore生成 linux_如何生成KeyStore

    介绍如何生成keystore cmd下: 进入到jdk的bin目录,这样的话,android.keystore文件就会生成在这个目录下,签名的时候我们需要这个文件. C:\Program Files\ ...

  4. android studio生产签名文件,Android Studio生成keystore签名文件步骤讲解

    Android App打包时要用到签名文件,Android Studio生成签名文件步骤如下: Build---Generate Signed Apk...如图: 如果你的project中有2个或者2 ...

  5. Android Studio生成keystore签名文件

    Android App打包时要用到签名文件,Android Studio生成签名文件步骤如下: Build---Generate Signed Apk...如图: 如果你的project中有2个或者2 ...

  6. MAC下 Android签名生成keystore

    1.生成证书 在终端输入 keytool -genkey -v -keystore android.keystore -alias android -keyalg RSA -validity 2000 ...

  7. Android平台签名证书(.keystore)生成指南

    来源:https://ask.dcloud.net.cn/article/35777 Android平台签名证书(.keystore)生成指南 分类:HTML5+ Android证书 Android平 ...

  8. 「移动端」Android平台签名证书(.keystore)生成指南

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站.→传送门 本文主要介绍Android平台签名证书(.keystore)生成指南 Android平台打包 ...

  9. android studio生产签名文件,Android Studio 生成 keystore 签名文件

    Android Studio 生成 keystore 签名文件 常见 SSL 证书格式 : .DER .CER,文件是二进制格式,只保存证书,不保存私钥. .PEM,一般是文本格式,可保存证书,可保存 ...

最新文章

  1. LSTM为何如此有效?
  2. 通过案例了解puppet创建虚拟资源解决资源冲突问题
  3. PMCAFF微课堂 | 运营女神揭秘产品运营推广中的场景思维
  4. vue v-for指令
  5. 监控指标10K+!携程实时智能检测平台实践
  6. 集合中重写equals方法删除new的对象
  7. DataGridView添加一行数据、全选、取消全选、清空数据、删除选中行
  8. jedispool redis哨兵_Redis详解(九)------ 哨兵(Sentinel)模式详解
  9. 基于JAVA+Servlet+JSP+MYSQL的员工管理系统
  10. php fpm 平滑重启,nginx、php-fpm平滑重启和重载配置
  11. Android开发检测网络是否连接
  12. BigDecimal浮点精度加减乘除运算
  13. c语言教材衡军山 答案,c语言
  14. html单页模板wap,单页模板html
  15. R语言导入数据文件(数据导入、加载、读取)、使用readr包中的read_csv函数导入逗号分割文件CSV(Comma Delimited Text File)
  16. 小程序中商家入驻提醒、新订单提醒
  17. 全志V3s USB PHY驱动分析
  18. 【Ubuntu系统配置】006Ubuntu20.04安装QQ for Linux v3.0(del文件安装卸载)
  19. java中用new创建一个对象的过程解析
  20. 键盘上一些常用按键的ASCII码值

热门文章

  1. libpcap/tcpdump—3—抓包结论(3 packets captured,3 packets received by filter,0 packets dropped by kernel)
  2. 躺好,老司机带你收割小米机器人
  3. 异或运算规则及其应用
  4. 算法总结——异或运算
  5. 哪种蓝牙耳机最好?最具人气的十大蓝牙耳机品牌
  6. 合并不同excel表格的数据到同一个excel表格中
  7. 如何修改系统提示音 (ex:触摸提示音)
  8. Android岗面试必问!斗鱼直播Android开发二面被刷,深度好文
  9. 自助收银、自助点餐加上小程序结合应用,可以做些什么?
  10. 解决:全局引用了低版本的avue,而有些功能却在后续版本才有的问题