sha1withrsa算法

浅谈加密与签名

我们一般的加密主要分2种。对称加密。非对称加密。顾名思义。对称加密就是秘钥是一样的。通过同一个秘钥加密解密。这一类的加密算法有DES,3DES,AES等。而非对称加密即使用公钥和秘钥2个。公钥进行加密,而私钥进行解密。这一类的加密算法主要RSA

数字签名并不是加密。他只是将传递的参数进行签名。服务器端可以验签。主要作用有2个:1.保证数据不会被篡改。2.保证请求的确是秘钥持有者发送的。 虽然他不是加密但是这里我们使用到了RSA加密。sha1withrsa顾名思义。是将加密对象进行sha1后进行rsa加密。当然。并不是简单的sha1后就直接rsa。中间有一些处理。具体的细节我不是很了解。也不需要了解除非你对算法极度感兴趣。可以去找找资料弄明白。不管怎样处理。最后我们得到了用rsa秘钥加密后的数据。一般情况下我们会base64成一个字符串,方便传输。这样的字符串就是数字签名了。服务器端只需要用对应的公钥进行验签就可以判断出是不是秘钥持有者发送的消息了。

总结起来就是非对称加密的公钥可以对被私钥加密的数据进行验签,而被公钥加密的数据私钥可以进行解密。


浅谈rsa秘钥公钥以及pkcs1,pkcs8格式

自己生成公钥秘钥一般情况下就需要使用openssl工具了。使用工具执行命令

genrsa -out rsa_private_key.pem 2048

2048指的是位数。一般情况下1024也够用了。如果要求高点还是2048位更加合适点。生成的pem文件里面以-----BEGIN RSA PRIVATE KEY-----开头-----END RSA PRIVATE KEY-----结尾的字符串。中间的部分才是秘钥的base64字符串.这个是pkcs1格式的。也就是原本的rsa密钥。

rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

上面的命令会根据刚刚的私钥生成pkcs8格式的公钥。

如果需要pkcs8个格式的私钥(java就是用pkcs8格式的)需要

pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

会打印出来以-----BEGIN PRIVATE KEY-----开头。以-----END PRIVATE KEY-----结尾的私钥。

这里我们需要了解一下pkcs1格式和pkcs8格式的区别和关联:
pkcs1的格式才是原本的rsa的密钥。而pkcs8的格式是在pkcs1的数据上增加一些信息。具体这些信息是什么我并没有去深入了解。我们只需要知道pkcs1和pkcs8之间是可以转换的。


使用java.security包进行私钥签名,公钥验签,公钥加密,私钥解密

从文件获取公钥、私钥

    public static PublicKey loadPublicKeyFromFile(String publicKeyFileName) {
   
        InputStream fis;
        PublicKey pubKey = null;
        try {
   
            fis = new FileInputStream(publicKeyFileName);
            CertificateFactory cf = CertificateFactory.getInstance("x509");
            Certificate cerCert = cf.generateCertificate(fis);
            pubKey = cerCert.getPublicKey();
        } catch (FileNotFoundException | CertificateException e) {
   
            e.printStackTrace();
        }

        return pubKey;
    }

    public static PrivateKey loadPriviteKeyFromFile(String privateKeyFileName, String aliasName, String password) {
   
        InputStream fis;
        PrivateKey priKey = null;
        try {
   
            fis = new FileInputStream(privateKeyFileName);
            KeyStore keyStore = KeyStore.getInstance("PKCS12");
            char[] pscs = password.toCharArray();
            keyStore.load(fis, pscs);
            priKey = (PrivateKey) (keyStore.getKey(aliasName, pscs));
        } catch (Exception e) {
   
            e.printStackTrace();
        }

        retu
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值