首页 > 学院 > 逻辑算法 > 正文

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

2019-09-10 08:59:00
字体:
来源:转载
供稿:网友

    2)私钥加密:

    消息摘要只能检查消息的完整性,但是单向的,对明文消息并不能加密,要加密明文的消息的话,就要使用其他的算法,要确保机密性,我们需要使用私钥密码术来交换私有消息。

    这种最好理解,使用对称算法。比如:A用一个密钥对一个文件加密,而B读取这个文件的话,则需要和A一样的密钥,双方共享一个私钥(而在web环境下,私钥在传递时容易被侦听):

    使用私钥加密的话,首先需要一个密钥,可用javax.crypto.KeyGenerator产生一个密钥(java.security.Key),然后传递给一个加密工具(javax.crypto.Cipher),该工具再使用相应的算法来进行加密,主要对称算法有:DES(实际密钥只用到56位),AES(支持三种密钥长度:128、192、256位),通常首先128位,其他的还有DESede等,jdk1.5种也提供了对对称算法的支持,以下例子使用AES算法来加密:

    Java代码

    /**

    *PrivateExmaple.java

    *Copyright 2005-2-16

    */

    import javax.crypto.Cipher;

    import javax.crypto.KeyGenerator;

    import java.security.Key;

    /**

    *私加密,保证消息机密性

    */

    public class PrivateExample{

    public static void main(String[] args) throws Exception{

    if(args.length!=1){

    System.err.println(“Usage:java PrivateExample <text>”);

    System.exit(1);

    }

    byte[] plainText=args[0].getBytes(“UTF8”);

    //通过KeyGenerator形成一个key

    System.out.println(“

    Start generate AES key”);

    KeyGenerator keyGen=KeyGenerator.getInstance(“AES”);

    keyGen.init(128);

    Key key=keyGen.generateKey();

    System.out.println(“Finish generating DES key”);

    //获得一个私加密类Cipher,ECB是加密方式,PKCS5Padding是填充方法

    Cipher cipher=Cipher.getInstance(“AES/ECB/PKCS5Padding”);

    System.out.println(“

    ”+cipher.getProvider()。getInfo());

    //使用私加密

    System.out.println(“

    Start encryption:”);

    cipher.init(Cipher.ENCRYPT_MODE,key);

    byte[] cipherText=cipher.doFinal(plainText);

    System.out.println(“Finish encryption:”);

    System.out.println(new String(cipherText,“UTF8”));

    System.out.println(“

    Start decryption:”);

    cipher.init(Cipher.DECRYPT_MODE,key);

    byte[] newPlainText=cipher.doFinal(cipherText);

    System.out.println(“Finish decryption:”);

    System.out.println(new String(newPlainText,“UTF8”));

    }

    }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选