Rsa实现代码

感兴趣的同学自己观看,使用JDK自带

public static void RSA() throws Exception {
        //1.生成公私钥匙
        //KeyPairGenerator 类用于生成公钥和私钥对。密钥对生成器是使用 getInstance 工厂方法(返回一个给定类的实例的静态方法)构造的。
        //特定算法的密钥对生成器可以创建能够与此算法一起使用的公钥/私钥对。它还可以将特定于算法的参数与每个生成的密钥关联。
        //initialize(int keysize) 初始化确定密钥大小的密钥对生成器,使用默认的参数集合,
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        RSAPrivateKey rsaprivateKey = (RSAPrivateKey) keyPair.getPrivate();
        RSAPublicKey rsapublicKey = (RSAPublicKey) keyPair.getPublic();
        System.out.println("私钥匙:" + Base64Utils.encodeToString(rsaprivateKey.getEncoded()));
        System.out.println("公钥:" + Base64Utils.encodeToString(rsapublicKey.getEncoded()));

        //2.私钥加密,
        //PKCS8EncodedKeySpec 进行编码的专用密钥的 ASN.1 编码
        PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaprivateKey.getEncoded());
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
        Cipher cipher = Cipher.getInstance("RSA");
        //Cipher.ENCRYPT_MODE, 用于将 Cipher 初始化为加密模式的常量。
        cipher.init(Cipher.ENCRYPT_MODE, privateKey);
        byte[] result = cipher.doFinal(text.getBytes());
        System.out.println("私钥加密:" + Base64Utils.encodeToString(result));

        //3.公钥解密
        // X509EncodedKeySpec 进行编码的公用密钥的 ASN.1 编码
        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsapublicKey.getEncoded());
        PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
        //Cipher.DECRYPT_MODE 用于将 Cipher 初始化为解密模式的常量。
        cipher.init(Cipher.DECRYPT_MODE, publicKey);
        result = cipher.doFinal(result);
        System.out.println("公钥解密:" + new String(result));


        //TODO 使用SHA256加密解密
        Signature signature = Signature.getInstance("SHA256withRSA");
        signature.initSign(privateKey);
        signature.update(text.getBytes());
        result = signature.sign();
        System.out.println("SHA256withRSA加密:" + Base64Utils.encodeToString(result));

        signature.initVerify(publicKey);
        signature.update(text.getBytes());
        boolean flag = signature.verify(result);
        System.out.println("SHA256withRSA解密:" + flag);
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,809评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,286评论 19 139
  • 【1】 你确定选生物专业?学生物能干嘛?”大学选专业时妈妈的担心。 “我们这个专业啊,要么考研深造,要么跑业务买医...
    人鱼说阅读 3,172评论 6 3
  • 不会哭泣的人 我看着喝得醉醺醺的爸爸,一回来就抓着妈妈往死里打,他打完了妈妈走向我,手上还提着酒瓶子,东到西歪的走...
    冉西阅读 377评论 0 2
  • 记录一个疯狂思念你的午后。 每分每秒想你在身边 因为难过 因为对自己的现状不满意 而我最得意的 只有你 但又怕 把...
    Yooseona阅读 341评论 0 0