[메모] NPOI에서 Excel 양식에 대한 암호 보호

5610 단어 C#POIJavaNPOI

하고 싶은 일


어떤 사건에서 엑셀이 왜곡되었는지는 간단하고 알기 쉬운 방법을 취해야 한다.
"그러면 책에 비밀번호를 넣으면 되잖아!"
이렇게 생각하면서 조사를 시작한 것이 계기였다.

결론


...조사를 시작했지만 책에 비밀번호를 넣는 방법을 몰랐어요.
하지만 좌석을 보호하는 방법을 알았기에 메모로 남겼습니다.

Apache POI 4.1.2


자바에서 POI를 처리하려고 할 때 Worksheet와 Workbook이 잠겼습니다.
filename.java
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sample");

WriteCell(sheet, 0, 0, "Hello"); // 参考記事:【C#】NPOIを使ってExcelファイルを作成・編集する

// ワークシートの保護
sheet.protectSheet("password");

// ワークブックの保護
workbook.lockStructure();
workbook.setWorkbookPassword("password", HashAlgorithm.sha256);

// ワークブックの書き出し
var out = new FileOutputStream("C:\\hogehoge.xlsx");
workbook.write(out);
workbook.close();
out.close();
생성된 Excel 파일 "hogehoge.xlsx"를 열 때 잠겼습니다.

NPOI 2.5.1 시


Worksheet를 잠글 수 있지만 Workbook을 잠글 방법을 찾을 수 없습니다.
※ 누군가 알고 있다면 방법을 알려주세요.

워크시트 보호 예제 코드


POI와 차이가 많지 않습니다.
filename.cs
var workbook = new XSSFWorkBook();
ISheet worksheet = workBook.CreateSheet("testSheet1");

worksheet.ProtectSheet("password");  //シートのパスワードを設定
workbook.LockStructure();            //ワークブックの構造を保護(ただしパスワードはかからない)

string srcFileName = @"C:\hogehoge.xlsx";
FileStream stream = (File.Exists(srcFileName))
      ? File.OpenWrite(srcFileName)
      : File.Create(srcFileName)
);
workbook.Write(stream);

도전하다


원래 Workbook 보호에서 벗어난 소프트웨어가 있기 때문에 암호를 보호할 수 있어도 변경을 완전히 방지할 수 없다는 것을 주의해야 한다.도대체 쉬운 보호인지 고려해야 한다.

참고 자료


  • Protect workbook for structure ※ 결과는 미해결 상태로 종료되었습니다
  • Java POI Documentation XSSFWorkBook
  • [C#] NPOI를 사용하여 Excel 파일 작성, 편집
  • 기록 편집


    (2020.06.20) FileInfo에 대한 암호화가 작성되었지만 자세한 정보가 필요하여 삭제되었습니다.

    좋은 웹페이지 즐겨찾기