java cipher

Python014

java cipher,第1张

java cipher是什么,让我们一起了解一下?

cipher是在javax.crypto包下,构成了Java Cryptographic Extension (JCE) 框架的核心,Java的Cipher类提供了加密和解密的功能。

我们都知道,Cipher类是一个引擎类,它需要通过getInstance()工厂方法来实例化对象。那么该如何操作?

1、我们可以通过指定转换模式的方式获得实例化对象,方法如下所示:

// 返回实现指定转换的 Cipher对象

public static Cipher getInstance(String transformation)

2、也可以在制定转换模式的同时制定该转换模式的提供者,方法如下所示:

// 返回实现指定转换的 Cipher对象

public static Cipher getInstance(String transformation, Provider provider)

// 返回实现指定转换的 Cipher对象

public static Cipher getInstance(String transformation, String provider)  

注意这里的参数String transformation,通过如下代码示例:

Cipher c = Cipher.getInstance("DES")

上述实例化操作是一种最为简单的实现,并没有考虑DES分组算法的工作模式和填充模式,可通过以下方式对其设定:

Cipher c = Cipher.getInstance("DES/CBC/PKCS5Padding")

参数String transformation的格式是“算法/工作模式/填充模式”,不同的算法支持不同的工作模式以及填充模式。

另外,Java的Cipher类还提供了加密和解密的功能,那么JAVA是如何通过Cipher实现加密与解密的?

实战操作:具体代码如下 package com.bsd.yx import java.security.Key import java.security.Security import java.text.SimpleDateFormat import java.util.Date import javax.crypto.Cipher import com.ibm.model.cxf.Safety /**  * 加密与解密  * @author tanf  * @date 2013-11-08  */ public class EncryptionDecryption { /** * 默认密钥 */ private static String strDefaultKey = "tandaly201124335" /** 加密工具 */ private static Cipher encryptCipher = null /** 解密工具 */ private static Cipher decryptCipher = null /** * 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[] * hexStr2ByteArr(String strIn) 互为可逆的转换过程 *  * @param arrB *            需要转换的byte数组 * @return 转换后的字符串 * @throws Exception *  */ public static String byteArr2HexStr(byte[] arrB) throws Exception { int iLen = arrB.length // 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍 StringBuffer sb = new StringBuffer(iLen * 2) for (int i = 0 i 

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA")

keyGen.initialize(1024)

KeyPair key = keyGen.generateKeyPair()

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding")

//把第二个参数改为 key.getPrivate()

cipher.init(Cipher.ENCRYPT_MODE, key.getPublic())

byte[] cipherText = cipher.doFinal("Message".getBytes("UTF8"))

System.out.println(new String(cipherText, "UTF8"))

//把第二个参数改为key.getPublic()

cipher.init(Cipher.DECRYPT_MODE, key.getPrivate())

byte[] newPlainText = cipher.doFinal(cipherText)

System.out.println(new String(newPlainText, "UTF8"))

正常的用公钥加密私钥解密就是这个过程,如果按私钥加密公钥解密,只要按备注改2个参数就可以。

但是我要提醒楼主,你要公钥解密,公钥是公开的,相当于任何人都查到公钥可以解密。

你是想做签名是吧。