-
packagecom.hexun.blog.dongliwei.utils;
-
importjavax.crypto.Cipher;
-
importjava.security.*;
-
importjava.security.spec.RSAPublicKeySpec;
-
importjava.security.spec.RSAPrivateKeySpec;
-
importjava.security.spec.InvalidKeySpecException;
-
importjava.security.interfaces.RSAPrivateKey;
-
importjava.security.interfaces.RSAPublicKey;
-
importjava.io.*;
-
importjava.math.BigInteger;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
publicclassRSAUtil{
-
-
-
privateKeyPairkeyPair=null;
-
-
-
-
-
publicRSAUtil(){
-
try{
-
this.keyPair=this.generateKeyPair();
-
}catch(Exceptione){
-
e.printStackTrace();
-
}
-
}
-
-
-
-
-
-
-
privateKeyPairgenerateKeyPair()throwsException{
-
try{
-
KeyPairGeneratorkeyPairGen=KeyPairGenerator.getInstance("RSA",neworg.bouncycastle.jce.provider.BouncyCastleProvider());
-
-
finalintKEY_SIZE=1024;
-
keyPairGen.initialize(KEY_SIZE,newSecureRandom());
-
KeyPairkeyPair=keyPairGen.genKeyPair();
-
returnkeyPair;
-
}catch(Exceptione){
-
thrownewException(e.getMessage());
-
}
-
-
}
-
-
-
-
-
-
-
-
-
privateRSAPublicKeygenerateRSAPublicKey(byte[]modulus,byte[]publicExponent)throwsException{
-
-
KeyFactorykeyFac=null;
-
try{
-
keyFac=KeyFactory.getInstance("RSA",neworg.bouncycastle.jce.provider.BouncyCastleProvider());
-
}catch(NoSuchAlgorithmExceptionex){
-
thrownewException(ex.getMessage());
-
}
-
RSAPublicKeySpecpubKeySpec=newRSAPublicKeySpec(newBigInteger(modulus),newBigInteger(publicExponent));
-
try{
-
return(RSAPublicKey)keyFac.generatePublic(pubKeySpec);
-
}catch(InvalidKeySpecExceptionex){
-
thrownewException(ex.getMessage());
-
}
-
-
}
-
-
-
-
-
-
-
-
-
privateRSAPrivateKeygenerateRSAPrivateKey(byte[]modulus,byte[]privateExponent)throwsException{
-
KeyFactorykeyFac=null;
-
try{
-
keyFac=KeyFactory.getInstance("RSA",neworg.bouncycastle.jce.provider.BouncyCastleProvider());
-
}catch(NoSuchAlgorithmExceptionex){
-
thrownewException(ex.getMessage());
-
}
-
RSAPrivateKeySpecpriKeySpec=newRSAPrivateKeySpec(newBigInteger(modulus),newBigInteger(privateExponent));
-
try{
-
return(RSAPrivateKey)keyFac.generatePrivate(priKeySpec);
-
}catch(InvalidKeySpecExceptionex){
-
thrownewException(ex.getMessage());
-
}
-
}
-
-
-
-
-
-
-
-
-
publicbyte[]encrypt(Keykey,byte[]data)throwsException{
-
try{
-
Ciphercipher=Cipher.getInstance("RSA",neworg.bouncycastle.jce.provider.BouncyCastleProvider());
-
cipher.init(Cipher.ENCRYPT_MODE,key);
-
-
-
intblockSize=cipher.getBlockSize();
-
intoutputSize=cipher.getOutputSize(data.length);
-
intleavedSize=data.length%blockSize;
-
intblocksSize=leavedSize!=0?data.length/blockSize+1:data.length/blockSize;
-
byte[]raw=newbyte[outputSize*blocksSize];
-
inti=0;
-
while(data.length-i*blockSize>0){
-
if(data.length-i*blockSize>blockSize)
-
cipher.doFinal(data,i*blockSize,blockSize,raw,i*outputSize);
-
else
-
cipher.doFinal(data,i*blockSize,data.length-i*blockSize,raw,i*outputSize);
-
-
-
i++;
-
}
-
returnraw;
-
}catch(Exceptione){
-
thrownewException(e.getMessage());
-
}
-
}
-
-
-
-
-
-
-
-
-
publicbyte[]decrypt(Keykey,byte[]raw)throwsException{
-
try{
-
Ciphercipher=Cipher.getInstance("RSA",neworg.bouncycastle.jce.provider.BouncyCastleProvider());
-
cipher.init(cipher.DECRYPT_MODE,key);
-
intblockSize=cipher.getBlockSize();
-
ByteArrayOutputStreambout=newByteArrayOutputStream(64);
-
intj=0;
-
while(raw.length-j*blockSize>0){
-
bout.write(cipher.doFinal(raw,j*blockSize,blockSize));
-
j++;
-
}
-
returnbout.toByteArray();
-
}catch(Exceptione){
-
thrownewException(e.getMessage());
-
}
-
}
-
-
-
-
-
-
-
publicRSAPublicKeygetRSAPublicKey()throwsException{
-
-
-
RSAPublicKeypubKey=(RSAPublicKey)keyPair.getPublic();
-
-
byte[]pubModBytes=pubKey.getModulus().toByteArray();
-
-
byte[]pubPubExpBytes=pubKey.getPublicExponent().toByteArray();
-
-
RSAPublicKeyrecoveryPubKey=this.generateRSAPublicKey(pubModBytes,pubPubExpBytes);
-
returnrecoveryPubKey;
-
}
-
-
-
-
-
-
-
publicRSAPrivateKeygetRSAPrivateKey()throwsException{
-
-
-
RSAPrivateKeypriKey=(RSAPrivateKey)keyPair.getPrivate();
-
-
byte[]priModBytes=priKey.getModulus().toByteArray();
-
-
byte[]priPriExpBytes=priKey.getPrivateExponent().toByteArray();
-
-
RSAPrivateKeyrecoveryPriKey=this.generateRSAPrivateKey(priModBytes,priPriExpBytes);
-
returnrecoveryPriKey;
-
}
-
-
-
-
-
-
-
-
publicstaticvoidmain(String[]args)throwsException{
-
-
RSAUtilrsa=newRSAUtil();
-
Stringstr="董利伟";
-
RSAPublicKeypubKey=rsa.getRSAPublicKey();
-
RSAPrivateKeypriKey=rsa.getRSAPrivateKey();
-
System.out.println("加密后=="+newString(rsa.encrypt(pubKey,str.getBytes())));
-
System.out.println("解密后=="+newString(rsa.decrypt(priKey,rsa.encrypt(pubKey,str.getBytes()))));
-
}
-
}
分享到:  
|
|
相关资源推荐