`
damiao_cn
  • 浏览: 87748 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Java加密和数字签名 3公钥加密

    博客分类:
  • Java
阅读更多
最近初步接触了下Java加密和数字签名的相关内容,我学习的过程大概分五步:
1)消息摘要
2)私钥加密
3)公钥加密
4)数字签名
5)数字证书
下面的代码是第三部分:公钥加密
希望能为刚刚接触这个的朋友们省点事

package security;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import javax.crypto.Cipher;

/**
 * 此例子是一个公钥加密例子,Cipher类使用KeyPairGenerator(顾名思义:一对钥匙生成器)生成的公钥和私钥
 * 
 * 公钥加密也叫不对称加密,不对称算法使用一对密钥对,一个公钥,一个私钥,使用公钥加密的数据,只有私钥能
 * 解开(可用于加密);同时,使用私钥加密的数据,只有公钥能解开(签名)。但是速度很慢(比私钥加密慢100到
 * 1000倍),公钥的主要算法有RSA,还包括Blowfish,Diffie-Helman 等
 */
public class PublicKey {
    public static void main(String[] args) throws Exception {
        
        String before = "asdf";       
        byte[] plainText = before.getBytes("UTF8");
        
        //产生一个RSA密钥生成器KeyPairGenerator(顾名思义:一对钥匙生成器)
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        //定义密钥长度1024位
        keyGen.initialize(1024);
        //通过KeyPairGenerator产生密钥,注意:这里的key是一对钥匙!!
        KeyPair key = keyGen.generateKeyPair();

        //获得一个RSA的Cipher类,使用公钥加密
        Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
//        System.out.println("\n" + cipher.getProvider().getInfo());

        System.out.println("\n用公钥加密...");
        //Cipher.ENCRYPT_MODE意思是加密,从一对钥匙中得到公钥 key.getPublic()
        cipher.init(Cipher.ENCRYPT_MODE, key.getPublic());
        //用公钥进行加密,返回一个字节流
        byte[] cipherText = cipher.doFinal(plainText);
        //以UTF8格式把字节流转化为String
        String after1 = new String(cipherText, "UTF8");
        System.out.println("用公钥加密完成:"+after1);

        
        //使用私钥解密
        System.out.println("\n用私钥解密...");
        //Cipher.DECRYPT_MODE意思是解密,从一对钥匙中得到私钥 key.getPrivate()
        cipher.init(Cipher.DECRYPT_MODE, key.getPrivate());
        //用私钥进行解密,返回一个字节流
        byte[] newPlainText = cipher.doFinal(cipherText);

        String after2 = new String(newPlainText, "UTF8");
        System.out.println("用私钥解密完成:"+after2);
    }
}
分享到:
评论

相关推荐

    Java加密和数字签名编程快速入门.rar_Java加密_java 数字 签名_java 数字签名_数字 签名_数字签名

    通过阅读"Java加密和数字签名编程快速入门",无论是初学者还是有一定经验的开发者,都能掌握Java中加密和数字签名的基本原理和实际应用。"www.pudn.com.txt"可能是提供额外链接或资源的文本文件,而"Java加密和数字...

    Java加密和数字签名编程快速入门

    Java加密和数字签名编程是Java开发中的重要领域,主要用于数据安全和身份验证。在这个快速入门教程中,我们将探讨Java如何实现这些功能,并提供基础实践。 一、Java加密 1. 密码学基础:了解对称加密(如AES)和非...

    Java加密和数字签名编程 Java

    Java加密和数字签名编程是信息安全领域中的重要技术,它们在软件开发中扮演着不可或缺的角色,尤其是在保护数据安全、验证信息完整性和确保身份真实性方面。在Java中,这些功能主要通过Java Cryptography ...

    java加密和数字签名

    Java加密和数字签名是网络安全领域中的重要概念,用于保护数据的完整性和确保信息发送者的身份。在Java中,这些功能主要由Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE) 提供。本篇...

    C# RSA加密、支持JAVA格式公钥私钥

    RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在网络通信中的数据加密和数字签名。C#和Java作为两种常见的编程语言,都提供了实现RSA算法的库和接口。这个压缩包中的内容看起来是针对C#环境...

    java 国密算法实现包含SM2 SM3 SM4和数字签名、数字证书的验证

    下面将详细介绍这些算法以及它们在Java中的实现,以及如何进行数字签名和数字证书的验证。 1. **SM2算法**:SM2是一种基于椭圆曲线密码学(ECC)的公钥加密算法,用于非对称加密。它提供了密钥交换、签名和验证的...

    加密解密-Java加密和数字签名.doc

    Java加密和数字签名是网络安全领域中的重要概念,用于保护数据的隐私和完整性。在Java中,这些技术得到了广泛的应用和支持。 1. **消息摘要**: 消息摘要是一种单向散列函数,用于生成消息的固定长度表示,通常...

    Java加密解密和数字签名完整代码示例

    Java加密解密和数字签名完整代码示例 本资源主要介绍了Java加密解密和数字签名完整代码示例,涉及到多种加密算法和数字签名算法的应用,具有很高的参考价值。 一、加密算法 加密算法是指通过各种数学算法和技术来...

    java_DigitalSign.rar_ sign md5_hash md5 in java_公钥数字签名_加密_数字签名 j

    (3)接收方首先把接收到的密文用自己的私钥解密,得到明文信息和数字签名,再用发送方的公钥对数字签名进行解密,然后使用相同的单向散列算法来计算解密得到的明文信息,得到信息摘要;对比计算出来的信息摘要和...

    非对称加密算法 数字签名算法

    非对称加密算法和数字签名是信息技术中两个关键...总之,非对称加密算法和数字签名是保障网络通信安全的重要工具,Java提供了丰富的库支持这些功能的实现。理解并熟练运用这些技术,对于开发安全的应用和系统至关重要。

    Java加密和数字签名编程快速入门[整理].pdf

    总结起来,Java提供了丰富的加密和数字签名功能,包括消息摘要、私钥加密、公钥加密以及数字签名。这些技术在保护数据安全、确保消息完整性和验证发送者身份等方面发挥着重要作用。开发者可以根据具体需求选择合适的...

    java签名私钥加密公钥解密

    Java签名私钥加密和公钥解密是基于非对称加密算法的一种常见操作,主要用于确保数据的完整性和发送方身份的验证。在这个场景中,私钥用于加密数据,而公钥用于解密数据,这样的机制提供了强大的安全保障。下面将详细...

    Java与.NET RSA加密解密(签名,验签)实例代码

    RSA是一种广泛使用的非对称加密算法,适用于加密、解密、数字签名和验证数字签名。本实例代码着重于Java与.NET平台之间的RSA加密解密及签名验签操作,这对于跨平台的数据安全通信具有实际意义,例如与支付宝POS对接...

    java中使用公钥加密私钥解密原理实现license控制

    Java 中使用公钥加密私钥解密原理实现 License 控制 Java 中使用公钥加密私钥解密原理实现 License 控制是指在 Java 应用程序中使用公钥加密、私钥解密机制来实现 License 文件的控制。这种机制可以用来限制系统的...

    Java加密算法-公钥加密私钥解密

    尽管公钥加密提供了一种强大的安全保障,但在实际应用中,实现完整的客户端-服务器交互可能涉及到证书管理、数字签名、以及SSL/TLS协议等复杂环节。此外,公钥加密的效率较低,不适合大量数据的加密。 8. **示例...

    C# 实现与JAVA互通 加签/验签,RSA加密/解密

    * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥...

    Java 签名加密 + c#签名加密

    "Java 签名加密 + C#签名加密"这个主题涉及到的就是如何在Java和C#这两种不同的编程语言之间进行安全的数据交互,确保信息不被篡改。签名加密是一种常见的安全措施,它结合了数字签名和加密技术,用于验证数据的完整...

Global site tag (gtag.js) - Google Analytics