您的位置:首页 > 其它

RSA加密介绍

2014-11-17 10:31 113 查看
RSA 算法: RSA是目前最有影响力的公钥加密算法,

明文--->公钥--->密文 密文-->密钥-->明文

通过这个我们可知
他是公钥对内容进行加密 进而借助密钥对文件进行解密 因为公钥和密钥是不一样的 所以 我们将其称为

非对称加密。

RSA由于public
key<公钥> 和private key<密钥>的不同<也叫非对称算法加解密>,极大的提高了文件的安全性。

代码如下

KeyPairGenerator是一个引擎类可以生成私钥及其相关利用公钥算法初始化。

1:

//设置使用何种加密算法

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");

构造一个新实例的KeyPairGenerator算法使用的名称。

// 密钥位数

keyPairGen.initialize(1024);

// 密钥对

KeyPair keyPair = keyPairGen.generateKeyPair();

// 公钥

PublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

// 私钥

PrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();

2:

为了公钥跟私钥可以传输和保存,因此可以设置为将他们转化成base64的编码,用到以下方法:

注意 这个地方就是将数据转化为base64编码

/****************************************

* 函数说明:getKeyString 根据key得到64位加密字符串

*

* @param key 密钥

* @throws Exception

* @return String 加密后的字符串

* @author 王洪贺 2013-8-21

***************************************/

public static String getKeyString(Key key) throws Exception

{

byte[] keyBytes = key.getEncoded();

String s = base64Enc(keyBytes);

return s;

}

但加密跟解密的时候需要将base64位的编码转化为key的对象,所以用到以下两个方法:

/****************************************

* 函数说明:getPublicKey 取得公钥

*

* @param key 公钥字符串

* @throws Exception

* @return PublicKey 返回公钥

* @author 王洪贺 2013-8-21

***************************************/

public static PublicKey getPublicKey(String key) throws Exception

{

byte[] keyBytes;

keyBytes = base64Dec(key);

X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

PublicKey publicKey = keyFactory.generatePublic(keySpec);

return publicKey;

}

/****************************************

* 函数说明:getPrivateKey 取得私钥

*

* @param key 私钥字符串

* @throws Exception

* @return PrivateKey 返回私钥

* @author 王洪贺 2013-8-21

***************************************/

public static PrivateKey getPrivateKey(String key) throws Exception

{

byte[] keyBytes;

keyBytes = base64Dec(key);

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

PrivateKey privateKey = keyFactory.generatePrivate(keySpec);

return privateKey;

}

下面就是加密过程,很简单:

// 实例化加解密类

Cipher cipher = Cipher.getInstance("RSA");

// 明文

byte[] plainText = "明文".getBytes();

// 加密

cipher.init(Cipher.ENCRYPT_MODE, publicKe);

  //将明文转化为根据公钥加密的密文,为byte数组格式

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

  //为了方便传输我们可以将byte数组转化为base64的编码

String str = base64Enc(enBytes );

复制代码

下面是解密过程,跟加密过程类似:

Cipher cipher = Cipher.getInstance("RSA");

cipher.init(Cipher.DECRYPT_MODE, privateKey);

//先将转为base64编码的加密后的数据转化为byte数组

byte[] enBytes = base64Dec(str);

//解密称为byte数组,应该为字符串数组最后转化为字符串

byte[] deBytes = cipher.doFinal(enBytes);

String strdecoded = new String(deBytes);

复制代码

总结 可得

1:其实我们找个地方就是首先借助KeyPairGenerator来确定是何种加密方式

比如RSA
另外 我们此时获得我们的公钥和密钥

2:
但是我们为了传输数据的时候更加容易 所以我们就借助base64编码

3:借助 Cipher类实现我们的我们的对传输内容进行加密和解密。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: