实现对密钥对整个项目所有加密解密文件都适用思路方法,采用先生成对密钥.保存到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算法执行速度要非常非常慢
最新评论