public class RSA
extends java.lang.Object
示例:
System.out.println(">> createKeyPair");
RSA rsa = new RSA();
Map<String, Object> keyPair = rsa.createKeyPair();
for (Map.Entry<String, Object> entry : keyPair.entrySet()) {
System.out.println(entry.getKey() + " == " + entry.getValue());
}
String data = "啦啦啦";
System.out.println(">> encrypt by private key");
rsa.setPrivateKey((String) keyPair.get(PRIVATE_KEY_B64));
String encrypted = rsa.encryptToBase64(data);
System.out.println("encrypted: " + encrypted);
System.out.println(">> decrypt by public key");
rsa.setPublicKey((String) keyPair.get(PUBLIC_KEY_B64));
String decrypted = rsa.decryptString(encrypted);
System.out.println("decrypted1: " + decrypted);
System.out.println("decrypted2: " + rsa.decryptString(rsa.encrypt(data.getBytes(CHARSET))));
System.out.println("equals: " + data.equals(decrypted));
rsa.encrypt(new FileInputStream("/dev/shm/ramdisk/plain.xls"), new FileOutputStream("/dev/shm/ramdisk/enc"))
rsa.decrypt(new FileInputStream("/dev/shm/ramdisk/enc"), new FileOutputStream("/dev/shm/ramdisk/dec.xls"))
| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
ALGORITHM |
static java.lang.String |
BASE64_TYPE_MINE |
static java.lang.String |
BASE64_TYPE_URLSAFE |
static java.nio.charset.Charset |
CHARSET |
static java.lang.String |
PRIVATE_KEY |
static java.lang.String |
PRIVATE_KEY_B64 |
static java.lang.String |
PUBLIC_KEY |
static java.lang.String |
PUBLIC_KEY_B64 |
| Constructor and Description |
|---|
RSA() |
| Modifier and Type | Method and Description |
|---|---|
java.util.Map<java.lang.String,java.lang.Object> |
createKeyPair()
生成 1024 位的公钥和私钥的密钥对
|
java.util.Map<java.lang.String,java.lang.Object> |
createKeyPair(int keysize)
生成公钥和私钥的密钥对
|
byte[] |
decrypt(byte[] encryptedData)
使用公钥进行数据解密
|
void |
decrypt(java.io.InputStream encryptedIs,
java.io.OutputStream decryptedOs)
使用公钥进行数据解密
|
byte[] |
decrypt(java.lang.String encryptedStr)
使用公钥对使用 Base64 编码过的数据解密
|
java.lang.String |
decryptString(byte[] encryptedData)
使用公钥进行数据解密,并返回解密后的字符串
|
java.lang.String |
decryptString(java.lang.String encryptedStr)
使用公钥对使用 Base64 编码过的数据解密,并返回解密后的字符串
|
byte[] |
encrypt(byte[] plainData)
使用私钥进行数据加密
|
void |
encrypt(java.io.InputStream plainIs,
java.io.OutputStream encryptedOs)
使用私钥进行数据加密
|
java.lang.String |
encryptToBase64(byte[] plainData)
使用私钥对数据加密,并返回 Base64 编码后的字符串
|
java.lang.String |
encryptToBase64(java.lang.String plainStr)
使用私钥对字符串加密,并返回 Base64 编码后的字符串
|
java.security.interfaces.RSAPrivateKey |
getPrivateKey() |
java.security.interfaces.RSAPublicKey |
getPublicKey() |
static void |
main(java.lang.String[] args) |
RSA |
setBase64Type(java.lang.String type)
设置 Base64 的编解码器类型
|
RSA |
setPrivateKey(java.security.interfaces.RSAPrivateKey privateKey)
设置私钥
|
RSA |
setPrivateKey(java.lang.String privateKey)
设置私钥
|
RSA |
setPublicKey(java.security.interfaces.RSAPublicKey publicKey)
设置公钥
|
RSA |
setPublicKey(java.lang.String publicKey)
设置公钥
|
public static final java.nio.charset.Charset CHARSET
public static final java.lang.String ALGORITHM
public static final java.lang.String PUBLIC_KEY
public static final java.lang.String PUBLIC_KEY_B64
public static final java.lang.String PRIVATE_KEY
public static final java.lang.String PRIVATE_KEY_B64
public static final java.lang.String BASE64_TYPE_URLSAFE
public static final java.lang.String BASE64_TYPE_MINE
public java.util.Map<java.lang.String,java.lang.Object> createKeyPair()
public java.util.Map<java.lang.String,java.lang.Object> createKeyPair(int keysize)
keysize - 秘钥位数,如 1024、2048public RSA setPublicKey(java.lang.String publicKey) throws java.security.spec.InvalidKeySpecException
publicKey - 使用 Base64 编码过的公钥java.security.spec.InvalidKeySpecException - .public RSA setPublicKey(java.security.interfaces.RSAPublicKey publicKey)
publicKey - 公钥public java.security.interfaces.RSAPublicKey getPublicKey()
public RSA setPrivateKey(java.lang.String privateKey) throws java.security.spec.InvalidKeySpecException
privateKey - 使用 Base64 编码过的私钥java.security.spec.InvalidKeySpecException - .public RSA setPrivateKey(java.security.interfaces.RSAPrivateKey privateKey)
privateKey - 私钥public java.security.interfaces.RSAPrivateKey getPrivateKey()
public void encrypt(java.io.InputStream plainIs,
java.io.OutputStream encryptedOs)
throws java.security.InvalidKeyException,
javax.crypto.BadPaddingException,
javax.crypto.IllegalBlockSizeException,
java.io.IOException
plainIs - 需要加密的输入流encryptedOs - 加密后的输出流java.security.InvalidKeyException - .javax.crypto.BadPaddingException - .javax.crypto.IllegalBlockSizeException - .java.io.IOException - .public byte[] encrypt(byte[] plainData)
throws java.security.InvalidKeyException,
javax.crypto.BadPaddingException,
javax.crypto.IllegalBlockSizeException
plainData - 需要加密的数据java.security.InvalidKeyException - .javax.crypto.BadPaddingException - .javax.crypto.IllegalBlockSizeException - .public java.lang.String encryptToBase64(byte[] plainData)
throws javax.crypto.BadPaddingException,
java.security.InvalidKeyException,
javax.crypto.IllegalBlockSizeException
plainData - 需要加密的数据javax.crypto.BadPaddingException - .java.security.InvalidKeyException - .javax.crypto.IllegalBlockSizeException - .public java.lang.String encryptToBase64(java.lang.String plainStr)
throws javax.crypto.BadPaddingException,
java.security.InvalidKeyException,
javax.crypto.IllegalBlockSizeException
plainStr - 需要加密的字符串javax.crypto.BadPaddingException - .java.security.InvalidKeyException - .javax.crypto.IllegalBlockSizeException - .public void decrypt(java.io.InputStream encryptedIs,
java.io.OutputStream decryptedOs)
throws java.security.InvalidKeyException,
javax.crypto.BadPaddingException,
javax.crypto.IllegalBlockSizeException,
java.io.IOException
encryptedIs - 已加密的数据输入流decryptedOs - 解密的数据输出流java.security.InvalidKeyException - .javax.crypto.BadPaddingException - .javax.crypto.IllegalBlockSizeException - .java.io.IOException - .public byte[] decrypt(byte[] encryptedData)
throws java.security.InvalidKeyException,
javax.crypto.BadPaddingException,
javax.crypto.IllegalBlockSizeException
encryptedData - 已加密的数据java.security.InvalidKeyException - .javax.crypto.BadPaddingException - .javax.crypto.IllegalBlockSizeException - .public byte[] decrypt(java.lang.String encryptedStr)
throws javax.crypto.BadPaddingException,
java.security.InvalidKeyException,
javax.crypto.IllegalBlockSizeException
encryptedStr - 已加密并 Base64 编码的数据javax.crypto.BadPaddingException - .java.security.InvalidKeyException - .javax.crypto.IllegalBlockSizeException - .public java.lang.String decryptString(byte[] encryptedData)
throws javax.crypto.BadPaddingException,
java.security.InvalidKeyException,
javax.crypto.IllegalBlockSizeException
encryptedData - 已加密的数据javax.crypto.BadPaddingException - .java.security.InvalidKeyException - .javax.crypto.IllegalBlockSizeException - .public java.lang.String decryptString(java.lang.String encryptedStr)
throws javax.crypto.BadPaddingException,
java.security.InvalidKeyException,
javax.crypto.IllegalBlockSizeException
encryptedStr - 已加密并 Base64 编码的数据javax.crypto.BadPaddingException - .java.security.InvalidKeyException - .javax.crypto.IllegalBlockSizeException - .public RSA setBase64Type(java.lang.String type)
type - 可选 BASE64_TYPE_URLSAFE、BASE64_TYPE_MINE、其他(默认)public static void main(java.lang.String[] args)
throws java.lang.Exception
java.lang.Exception