rsa算法实现:JAVA实现RSA算法



实现对密钥对整个项目所有加密解密文件都适用思路方法,采用先生成对密钥.保存到xml文件中,以后获得私匙和公钥只需要从xml文件中取得就可以了.



/**

*把成生对密钥保存到RSAKey.xml文件中

*/

publicvoidsaveRSAKey{

try{

SecureRandomsr=SecureRandom;

KeyPairGeneratorkg=KeyPairGenerator.getInstance(\"RSA\",

org.bouncycastle.jce.provider.BouncyCastleProvider);

//注意密钥大小最好为1024,否则解密会有乱码情况.

kg.initialize(1024,sr);

FileOutputStreamfos=FileOutputStream(\"C:/RSAKey.xml\");

ObjectOutputStreamoos=ObjectOutputStream(fos);

//生成密钥

oos.writeObject(kg.generateKeyPair);

oos.close;

}catch(Exceptione){

e.prStackTrace;

}

}





注意:需要从http://www.bouncycastle.org下载bcprov-jdk14-137.jar包.

获取密钥思路方法如下:

/**

*获得RSA加密密钥

*@KeyPair返回对称密钥

*/

publicKeyPairgetKeyPair{

//产生新密钥对

KeyPairkp;

try{

StringfileName=\"conf/RASKey.xml\";

InputStreamis=FileUtils..getClassLoader

.getResourceAsStream(fileName); [Page]

ObjectInputStreamoos=ObjectInputStream(is);

kp=(KeyPair)oos.readObject;

oos.close;

}catch(Exceptione){

throwEprasRuntimeException(\"读取加密文件出错.\",e);

}

kp;

}







文件采用RSA算法加密文件

/**
*文件file进行加密并保存目标文件destFile中

*@paramsrcFileName
*要加密文件如c:/test/srcFile.txt
*@paramdestFileName
*加密后存放文件名如c:/加密后文件.txt
*/

publicvoidencryptFile(StringsrcFileName,

StringdestFileName)throwsException{

OutputStreamoutputWriter=null;

InputStreaminputReader=null;

try{

Ciphercipher=Cipher.getInstance(\"RSA/ECB/PKCS1Padding\",

org.bouncycastle.jce.provider.BouncyCastleProvider);

buf=[100];



bufl;

cipher.init(Cipher.ENCRYPT_MODE,getKeyPair.getPublic);

outputWriter=FileOutputStream(destFileName);

inputReader=FileInputStream(srcFileName); [Page]

while((bufl=inputReader.read(buf))!=-1){

encText=null;

Arr=null;

(buf.lengthbufl){

Arr=buf;

}{

Arr=[bufl];

for(i=0;i){

Arr=()buf;

}

}

encText=cipher.doFinal(Arr);

outputWriter.write(encText);

}

outputWriter.flush;



}catch(Exceptione){

throwe;

}finally{

try{ [Page]

(outputWriter!=null){

outputWriter.close;

}

(inputReader!=null){

inputReader.close;

}

}catch(Exceptione){

}

}

}





文件采用RSA算法解密文件

/**
*文件file进行加密并保存目标文件destFile中

*@paramsrcFileName
*已加密文件如c:/加密后文件.txt
*@paramdestFileName
*解密后存放文件名如c:/test/解密后文件.txt
*/

publicvoiddecryptFile(StringsrcFileName,

StringdestFileName)throwsException{

OutputStreamoutputWriter=null;



InputStreaminputReader=null;

try{

Ciphercipher=Cipher.getInstance(\"RSA/ECB/PKCS1Padding\",

org.bouncycastle.jce.provider.BouncyCastleProvider);

buf=[128];

bufl;

cipher.init(Cipher.DECRYPT_MODE,getKeyPair.getPrivate); [Page]



outputWriter=FileOutputStream(destFileName);

inputReader=FileInputStream(srcFileName);

while((bufl=inputReader.read(buf))!=-1){

encText=null;

Arr=null;

(buf.lengthbufl){

Arr=buf;

}{

Arr=[bufl];

for(i=0;i){

Arr=()buf;

}

}

encText=cipher.doFinal(Arr);

outputWriter.write(encText);

}

outputWriter.flush;

}catch(Exceptione){ [Page]

throwe;

}finally{

try{

(outputWriter!=null){

outputWriter.close;

}

(inputReader!=null){

inputReader.close;

}

}catch(Exceptione){

}

}

}

如果对于大文件加密采用RSA算法执行速度要非常非常慢

Tags:  rsa加密算法 rsa算法 rsa加解密算法实现 rsa算法实现

延伸阅读

最新评论

发表评论