Android 与 Java里的ECC加签验签

本文不涉及ECC加密算法原理的详细解释,而是关注Android和Java中使用ECDSA进行加签验签的具体方法。重点讨论了在Android中由于缺少ECDSA生成私钥的包,需要引入BC库进行验签,而在Java中则可以直接操作。同时,提到了签名格式通常为DER编码的ASN.1格式,包括r和s两个整数值,以及如何处理非标准格式的签名以便于验签。
摘要由CSDN通过智能技术生成

1. 它的加密算法以及加签验签原理

因为网络上关于ECC的原理,加签验签原理都非常的多,我这边就不在进行原理方面的详述了,建议不是太懂的小伙伴看这个知乎的文章,写的非常详细:

一文读懂ECDSA算法如何保护数据 - 知乎学习区块链,总是无法避开各种加密算法,因为各种加密算法在实现区块链当中的各个环节都有着不可替代的作用。这里介绍一下在比特币以及以太坊当中被大量使用基于离散对数数学难题的ECDSA算法。 本文主要翻译自这篇…https://zhuanlan.zhihu.com/p/97953640

2. 关于在android与java中进行加签验签的方法与注意点

private static final String SIGNALGORITHMS = "SHA256withECDSA";
private static final String ALGORITHM = "EC";
private static final String PROVIDER = "BC";

2.1 BC和java以及android使用的ECDSA签名格式为DER编码的ASN.1格式,其中包含两个整数值r和s,并且应该为70字节,但是一般情况下ECDSA加签方法不是由java生成的话,它的格式不会是适合我们直接可以使用的r|s格式,因此可以使用一下方式来进行格式转换,使得我们可以直接使用,完成验签操作。
 

private static byte[] DEREncodeSignature(byte[] signature) throws IOException {
    BigInteger r = new BigInteger(1, Arrays.copyOfRange(signature, 0, 32));
    BigInteger s = new BigInteger(1, Arrays.copyOfRange(signature, 32, 64));
    ASN1EncodableVector v = new ASN1EncodableVector();
    v.add(new ASN1Integer(r));
    v.add(new 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值