import java security Key
import java security KeyFactory
import java security KeyPair
import java security KeyPairGenerator
import java security PrivateKey
import java security PublicKey
import java security interfaces RSAPrivateKey
import java security interfaces RSAPublicKey
import java security spec PKCS EncodedKeySpec
import java security spec X EncodedKeySpec
import javax crypto Cipher
import sun misc BASE Decoder
import sun misc BASE Encoder
public class RSACoder {
/**
* 得到公钥
* @throws Exception
*/
public static PublicKey getPublicKey(String key) throws Exception {
byte[] keyBytes
keyBytes = (new BASE Decoder()) decodeBuffer(key)
X EncodedKeySpec keySpec = new X EncodedKeySpec(keyBytes)
KeyFactory keyFactory = KeyFactory getInstance( RSA )
PublicKey publicKey = keyFactory generatePublic(keySpec)
return publicKey
}
/**
* 得到私钥
* @param key 密钥字符串(经过base 编码)
* @throws Exception
*/
public static PrivateKey getPrivateKey(String key) throws Exception {
byte[] keyBytes
keyBytes = (new BASE Decoder()) decodeBuffer(key)
PKCS EncodedKeySpec keySpec = new PKCS EncodedKeySpec(keyBytes)
KeyFactory keyFactory = KeyFactory getInstance( RSA )
PrivateKey privateKey = keyFactory generatePrivate(keySpec)
return privateKey
}
/**
* 得到密钥字符串(经过base 编码)
* @return
*/
public static String getKeyString(Key key) throws Exception {
byte[] keyBytes = key getEncoded()
String s = (new BASE Encoder()) encode(keyBytes)
return s
}
public static void main(String[] args) throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator getInstance( RSA )
//密钥位数
keyPairGen initialize( )
//密钥对
KeyPair keyPair = keyPairGen generateKeyPair()
// 公钥
PublicKey publicKey = (RSAPublicKey) keyPair getPublic()
// 私钥
PrivateKey privateKey = (RSAPrivateKey) keyPair getPrivate()
String publicKeyString = getKeyString(publicKey)
System out println( public:\n + publicKeyString)
String privateKeyString = getKeyString(privateKey)
System out println( private:\n + privateKeyString)
//加解密类
Cipher cipher = Cipher getInstance( RSA )//Cipher getInstance( RSA/ECB/PKCS Padding )
//明文
byte[] plainText = 我们都很好!邮件 getBytes()
//加密
cipher init(Cipher ENCRYPT_MODE publicKey)
byte[] enBytes = cipher doFinal(plainText)
//通过密钥字符串得到密钥
publicKey = getPublicKey(publicKeyString)
privateKey = getPrivateKey(privateKeyString)
//解密
cipher init(Cipher DECRYPT_MODE privateKey)
byte[]deBytes = cipher doFinal(enBytes)
publicKeyString = getKeyString(publicKey)
System out println( public:\n +publicKeyString)
privateKeyString = getKeyString(privateKey)
System out println( private:\n + privateKeyString)
String s = new String(deBytes)
System out println(s)
}
lishixinzhi/Article/program/Java/hx/201311/255161、用公钥加密,用私钥解密。
2、给别人发信息,就从服务器上拉下来别人的公钥,加密后发给他。
3、对方拿到信息后用自己的私钥解密。
4、这样,公钥加密后除了私钥持有人,别人都看不到信息。
5、若是用私钥加密,那么公钥都能解密,还有何安全性可言?
6、私钥加密的场合只有一个,那就是数字签名,用来表明这个信息来源于你。