在使用poi对excel文件的加密时遇到的问题。。
JAVA——DES/ECB/PKCS7Padding加密算法Cannot find any provider supporting DESEDE/CBC/PKCS7Padding(或者PKCS5Padding)
当时环境原因用的是jdk1.6,
原因呢显而易见就是不支持,,,
解决方法是添加拓展包 Bouncy Castle让它支持
在jre下的( jdk/jre)的 jre\lib\security 修改 java.security 文件,添加security.provider.(?尾巴那加1,2,3,4)=org.bouncycastle.jce.provider.BouncyCastleProvider。
2,下载好的jar包在/jre/lib/ext 下添加 bcprov-jdk15on-1.58.jar,版本看自己的,,也可以一起加一个 同版本的…ext-jdk…jar
(添加对地方啊,,,)
。。。
/**
* 加密Excl
* @param FILE
* @param password
* @throws IOException
* @throws InvalidFormatException
* @throws GeneralSecurityException
*/
public static void encryptExcl(String FILE, String password) throws IOException, InvalidFormatException, GeneralSecurityException {
if (FILE.toLowerCase().endsWith("xlsx")) {
System.out.println("=====加密 xlsx===="+FILE);
// 设置密 码 保 护 ·
POIFSFileSystem fs = new POIFSFileSystem();
EncryptionInfo info = new EncryptionInfo(EncryptionMode.standard);
Encryptor enc = info.getEncryptor();
//设置密码
enc.confirmPassword(password);
//加密文件
OPCPackage opc = OPCPackage.open(new File(FILE), PackageAccess.READ_WRITE);
OutputStream os = enc.getDataStream(fs);
opc.save(os);
opc.close();
// 这一步特别注意,导出之前一定要先关闭加密文件流,不然导出文件会损坏而无法打开
os.close();
//把加密后的文件写回到流
FileOutputStream fos = new FileOutputStream(FILE);
fs.writeFilesystem(fos);
fos.close();
} else {
System.out.println("=====加密 xls===="+FILE);
POIFSFileSystem poif = new POIFSFileSystem(new FileInputStream(FILE));
HSSFWorkbook wb = new HSSFWorkbook(poif);
// 设置密 码 保 护 ·
Biff8EncryptionKey.setCurrentUserPassword(password);
wb.writeProtectWorkbook(Biff8EncryptionKey.getCurrentUserPassword(), "管理员");
wb.unwriteProtectWorkbook();
// 写入excel文件
FileOutputStream fileOut = new FileOutputStream(FILE);
wb.write(fileOut);
fileOut.close();
}
System.out.println("over");
}