文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java项目中的非对称加密怎么利用RSA方式实现

2023-05-31 07:48

关注

java项目中的非对称加密怎么利用RSA方式实现?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

java 中RSA的方式实现非对称加密的实例

RSA通俗理解:

你只要去想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。

实现代码:

package com.sahadev;  import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec;  import javax.crypto.Cipher;  import org.apache.commons.codec.binary.Base64;  public class RSA {    public static void main(String[] args) {     JDKRSA();   }    public static void JDKRSA() {     try {       // 构建密钥对儿       KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");       keyPairGenerator.initialize(512);       KeyPair keyPair = keyPairGenerator.generateKeyPair();       RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();       RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();       System.out.println("Public Key : " + org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPublicKey.getEncoded()));       System.out.println("Private Key : " + org.apache.commons.codec.binary.Base64.encodeBase64String(rsaPrivateKey.getEncoded()));        // 2.私钥加密,公钥解密---加密       PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());       KeyFactory keyFactory = KeyFactory.getInstance("RSA");       PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);       Cipher cipher = Cipher.getInstance("RSA");       cipher.init(Cipher.ENCRYPT_MODE, privateKey);       byte[] result = cipher.doFinal(DH.src.getBytes());       System.out.println("私钥加密,公钥解密------加密 : " + Base64.encodeBase64String(result));        // 3.私钥加密,公钥解密---解密       X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());       keyFactory = KeyFactory.getInstance("RSA");       PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);       cipher = Cipher.getInstance("RSA");       cipher.init(Cipher.DECRYPT_MODE, publicKey);       result = cipher.doFinal(result);       System.out.println("私钥加密,公钥解密------解密 : " + new String(result));        // 4.公钥加密,私钥解密---加密       x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());       keyFactory = KeyFactory.getInstance("RSA");       publicKey = keyFactory.generatePublic(x509EncodedKeySpec);       cipher = Cipher.getInstance("RSA");       cipher.init(Cipher.ENCRYPT_MODE, publicKey);       result = cipher.doFinal(DH.src.getBytes());        System.out.println("公钥加密,私钥解密------加密 : " + Base64.encodeBase64String(result));        // 5.公钥加密,私钥解密---解密       pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());       keyFactory = KeyFactory.getInstance("RSA");       privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);       cipher = Cipher.getInstance("RSA");       cipher.init(Cipher.DECRYPT_MODE, privateKey);       result = cipher.doFinal(result);       System.out.println("公钥加密,私钥解密------解密 : " + new String(result));     } catch (Exception e) {       e.printStackTrace();     }   } }

附上输出结果: 

Public Key : MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJcFshoP5xm94r2aTbe++aMZMzJtXHxDpqmMQ9aL1cEthr2Xtac+Eckv32Kzb4R8C/6vObNBfd8sWx9FU5N2y6cCAwEAAQ== Private Key : MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAlwWyGg/nGb3ivZpNt775oxkzMm1cfEOmqYxD1ovVwS2GvZe1pz4RyS/fYrNvhHwL/q85s0F93yxbH0VTk3bLpwIDAQABAkBdAA7rabug6IRGykztyFcmjxAuD5aSl358jnoAFuCtMo4skfxh2vR4ENFUE0Lt0zJ3CKVH0o9UQDNG0r4jeOGRAiEA3KuXps9OG0AXuxLggg0e7B1Os5C3gNrH2fMqAPjtpY0CIQCvM4EPfdrjjNQiM0ATVBT5jZnw3PRu33pdyISWuoMHAwIgDOLMSUZjxj2Y5Si2CYIgoyMW/G9f99tOvlBvzHy8y+UCIF94MVu/uQdGNlJsmv3tU4CpKLmXrZq9LHDuU1HPUJcBAiEAy/0OS2Q9EBfmPwhsGXF4WMxj4wG0xzNFWxSeZB0qxzk= 私钥加密,公钥解密------加密 : NXF87irBEmK3x/fW7IWY4GuA8AP4Rvj4DJSp2Cjjsoo5X/ScHHKdvYtlM+9TOUAvMeuKWk5WH70g53q7+E73zg== 私钥加密,公钥解密------解密 : Hello,sahadev! 公钥加密,私钥解密------加密 : hjL8928jCbNtVCRhKaYAxQNJmiIAktBskhff2I01pbaHtfGH6GJTcP1i345/3I9OzwoVFxvi/oXgVJsIsg7MOQ== 公钥加密,私钥解密------解密 : Hello,sahadev!

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯