Java源码示例:org.apache.poi.poifs.crypt.EncryptionMode
示例1
private POIFSFileSystem openFileSystemAndEncrypt(File file) throws Exception {
POIFSFileSystem fileSystem = new POIFSFileSystem();
Encryptor encryptor = new EncryptionInfo(EncryptionMode.standard).getEncryptor();
encryptor.confirmPassword(writeWorkbookHolder.getPassword());
OPCPackage opcPackage = null;
try {
opcPackage = OPCPackage.open(file, PackageAccess.READ_WRITE);
OutputStream outputStream = encryptor.getDataStream(fileSystem);
opcPackage.save(outputStream);
} finally {
if (opcPackage != null) {
opcPackage.close();
}
}
return fileSystem;
}
示例2
@Test
public void Encryption() throws Exception {
String file = TestFileUtil.getPath() + "large" + File.separator + "large07.xlsx";
POIFSFileSystem fs = new POIFSFileSystem();
EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile);
Encryptor enc = info.getEncryptor();
enc.confirmPassword("foobaa");
OPCPackage opc = OPCPackage.open(new File(file), PackageAccess.READ_WRITE);
OutputStream os = enc.getDataStream(fs);
opc.save(os);
opc.close();
// Write out the encrypted version
FileOutputStream fos = new FileOutputStream("D:\\test\\99999999999.xlsx");
fs.writeFilesystem(fos);
fos.close();
fs.close();
}
示例3
public FilePassRecord(RecordInputStream in) {
encryptionType = in.readUShort();
EncryptionMode preferredMode;
switch (encryptionType) {
case ENCRYPTION_XOR:
preferredMode = EncryptionMode.xor;
break;
case ENCRYPTION_OTHER:
preferredMode = EncryptionMode.cryptoAPI;
break;
default:
throw new EncryptedDocumentException("invalid encryption type");
}
try {
encryptionInfo = new EncryptionInfo(in, preferredMode);
} catch (IOException e) {
throw new EncryptedDocumentException(e);
}
}
示例4
/**
* Returns the EncryptionMode object matching the String.
*
* @param encryptionMode encryption mode
*
*@return EncryptionMode object corresponding to encryption mode. Null if does not correspond to any mode.
*
*
*/
public static EncryptionMode getEncryptionModeCipher(String encryptionMode) {
if (encryptionMode==null) {
return null;
}
switch (encryptionMode) {
case "agile": return EncryptionMode.agile;
case "binaryRC4": return EncryptionMode.binaryRC4;
case "cryptoAPI": return EncryptionMode.cryptoAPI;
case "standard": return EncryptionMode.standard;
default:
LOG.error("Uknown enncryption mode \""+encryptionMode+"\"");
break;
//case "xor": return EncryptionMode.xor; // does not seem to be supported anymore
}
return null;
}
示例5
private void updateEncryptionInfo() {
// make sure, that we've read all the streams ...
readProperties();
FilePassRecord fpr = (FilePassRecord)workbook.findFirstRecordBySid(FilePassRecord.sid);
String password = Biff8EncryptionKey.getCurrentUserPassword();
WorkbookRecordList wrl = workbook.getWorkbookRecordList();
if (password == null) {
if (fpr != null) {
// need to remove password data
wrl.remove(fpr);
}
} else {
// create password record
if (fpr == null) {
fpr = new FilePassRecord(EncryptionMode.cryptoAPI);
wrl.add(1, fpr);
}
// check if the password has been changed
EncryptionInfo ei = fpr.getEncryptionInfo();
EncryptionVerifier ver = ei.getVerifier();
byte encVer[] = ver.getEncryptedVerifier();
Decryptor dec = ei.getDecryptor();
Encryptor enc = ei.getEncryptor();
try {
if (encVer == null || !dec.verifyPassword(password)) {
enc.confirmPassword(password);
} else {
byte verifier[] = dec.getVerifier();
byte salt[] = ver.getSalt();
enc.confirmPassword(password, null, null, verifier, salt, null);
}
} catch (GeneralSecurityException e) {
throw new EncryptedDocumentException("can't validate/update encryption setting", e);
}
}
}
示例6
/**
* 加密导出
*
* @param workbook workbook
* @param fileName fileName
* @param response response
* @param password password
*/
public static void encryptExport(final Workbook workbook, String fileName, HttpServletResponse response, final String password) {
if (workbook instanceof HSSFWorkbook) {
throw new IllegalArgumentException("Document encryption for.xls is not supported");
}
Path path = null;
try {
String suffix = Constants.XLSX;
path = TempFileOperator.createTempFile("encrypt_temp", suffix);
workbook.write(Files.newOutputStream(path));
final POIFSFileSystem fs = new POIFSFileSystem();
final EncryptionInfo info = new EncryptionInfo(EncryptionMode.standard);
final Encryptor enc = info.getEncryptor();
enc.confirmPassword(password);
try (OPCPackage opc = OPCPackage.open(path.toFile(), PackageAccess.READ_WRITE);
OutputStream os = enc.getDataStream(fs)) {
opc.save(os);
}
if (!fileName.endsWith(suffix)) {
fileName += suffix;
}
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
setAttachmentConfig(fileName, response);
fs.writeFilesystem(response.getOutputStream());
} catch (IOException | InvalidFormatException | GeneralSecurityException e) {
throw new RuntimeException(e);
} finally {
clear(workbook);
TempFileOperator.deleteTempFile(path);
}
}
示例7
/**
* 加密导出
*
* @param workbook workbook
* @param file file
* @param password password
* @throws Exception Exception
*/
public static void encryptExport(final Workbook workbook, File file, final String password) throws Exception {
if (workbook instanceof HSSFWorkbook) {
throw new IllegalArgumentException("Document encryption for.xls is not supported");
}
String suffix = Constants.XLSX;
if (!file.getName().endsWith(suffix)) {
file = Paths.get(file.getAbsolutePath() + suffix).toFile();
}
try (FileOutputStream fos = new FileOutputStream(file)) {
workbook.write(fos);
if (workbook instanceof SXSSFWorkbook) {
((SXSSFWorkbook) workbook).dispose();
}
final POIFSFileSystem fs = new POIFSFileSystem();
final EncryptionInfo info = new EncryptionInfo(EncryptionMode.standard);
final Encryptor enc = info.getEncryptor();
enc.confirmPassword(password);
try (OPCPackage opc = OPCPackage.open(file, PackageAccess.READ_WRITE);
OutputStream os = enc.getDataStream(fs)) {
opc.save(os);
}
try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
fs.writeFilesystem(fileOutputStream);
}
} finally {
workbook.close();
}
}
示例8
public FilePassRecord(EncryptionMode encryptionMode) {
encryptionType = (encryptionMode == EncryptionMode.xor) ? ENCRYPTION_XOR : ENCRYPTION_OTHER;
encryptionInfo = new EncryptionInfo(encryptionMode);
}