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

Java加密和数字签名 2私钥加密

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

package security;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import java.security.Key;

/**
 * 此例子是对一个字符串信息,用一个私钥(key)加密,然后在用该私钥解密,验证是否一致
 * 私钥加密,是对称加密
 * 使用对称算法。比如:A用一个密钥对一个文件加密,而B读取这个文件的话,则需要和A一样的密钥,双方共享一
 * 个私钥(而在web环境下,私钥在传递时容易被侦听)
 * 
 * 附:主要对称算法有:DES(实际密钥只用到56 位)
 * AES(支持三种密钥长度:128、192、256位),通常首先128位,其他的还有DESede等
 */
public class PrivateKey {
    public static void main(String[] args) throws Exception {

        String before = "asdf";       
        byte[] plainText = before.getBytes("UTF8");
        
        //1步**********************************************************************
        System.out.println("Start generate AES key.");
        //得到一个使用AES算法的KeyGenerator的实例
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        //定义密钥长度128位
        keyGen.init(128);
        //通过KeyGenerator产生一个key(密钥算法刚才已定义,为AES)
        Key key = keyGen.generateKey();
        System.out.println("Finish generating AES key."+key);

        
        //2步**********************************************************************
        //获得一个私钥加密类Cipher,定义Cipher的基本信息:ECB是加密方式,PKCS5Padding是填充方法
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
//        System.out.println("\n" + cipher.getProvider().getInfo());

        
        //3步**********************************************************************
        //使用私钥加密
        System.out.println("\n用私钥加密...");
        //把刚才生成的key当作参数,初始化使用刚才获得的私钥加密类,Cipher.ENCRYPT_MODE意思是加密
        cipher.init(Cipher.ENCRYPT_MODE, key);
        
        //私钥加密类Cipher进行加密,加密后返回一个字节流byte[]
        byte[] cipherText = cipher.doFinal(plainText);
        
        //以UTF8格式把字节流转化为String
        String after1 = new String(cipherText, "UTF8");
        System.out.println("用私钥加密完成:"+after1);

        
        //4步**********************************************************************
        //使用私钥对刚才加密的信息进行解密,看看是否一致,Cipher.DECRYPT_MODE意思是解密钥
        System.out.println("\n用私钥解密...");
        cipher.init(Cipher.DECRYPT_MODE, key);
        
        //对刚才私钥加密的字节流进行解密,解密后返回一个字节流byte[]
        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加密算法-公钥加密私钥解密

    2. **Java加密API** Java提供了Java Cryptography Extension (JCE) API来处理加密操作。这个库包括了`javax.crypto`包,其中的`Cipher`类用于执行加密和解密操作。`KeyPairGenerator`用于生成公钥和私钥对,`Key...

    java加密和数字签名

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

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

    Java 加密和数字签名编程快速入门 Java 加密和数字签名编程快速入门是指在 Java 中实现加密和...Java 加密和数字签名编程快速入门是指在 Java 中实现加密和数字签名的技术,包括消息摘要、私钥加密和数字签名等概念。

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

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

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

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

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

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

    java签名私钥加密公钥解密

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

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

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

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

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

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

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

    Java公钥加密私钥解密.rar

    这个名为"Java公钥加密私钥解密.rar"的压缩包文件包含了一个使用Java实现的公钥/私钥加密解密的示例。在这个案例中,开发者可能使用了Java的Java Cryptography Extension (JCE) 来实现RSA算法,这是一种非对称加密...

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

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

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

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

    RSA2--》加签+加密+解密+验签

    RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在数字签名、数据加密和安全通信中。本文将详细讲解RSA算法的加签、加密、解密以及验签的过程,结合Java语言来实现这一系列操作,并涉及到证书...

    Java实现RSA生成公钥私钥

    RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,例如数字签名、数据加密等。在Java中实现RSA公钥和私钥的生成,通常我们会使用Java Cryptography Extension (JCE) 提供的API,如`java.security....

Global site tag (gtag.js) - Google Analytics