PasswordReloadTest.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Shared;
  3. use PhpOffice\PhpSpreadsheet\Shared\PasswordHasher;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
  6. class PasswordReloadTest extends AbstractFunctional
  7. {
  8. /**
  9. * @dataProvider providerPasswords
  10. */
  11. public function testPasswordReload(string $format, string $algorithm, bool $supported = true): void
  12. {
  13. $password = 'hello';
  14. $spreadsheet = new Spreadsheet();
  15. $sheet = $spreadsheet->getActiveSheet();
  16. $sheet->getCell('A1')->setValue(1);
  17. $protection = $sheet->getProtection();
  18. $protection->setAlgorithm($algorithm);
  19. $protection->setPassword($password);
  20. $protection->setSheet(true);
  21. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, $format);
  22. $resheet = $reloadedSpreadsheet->getActiveSheet();
  23. $reprot = $resheet->getProtection();
  24. $repassword = $reprot->getPassword();
  25. $hash = '';
  26. if ($supported) {
  27. $readAlgorithm = $reprot->getAlgorithm();
  28. self::assertSame($algorithm, $readAlgorithm);
  29. $salt = $reprot->getSalt();
  30. $spin = $reprot->getSpinCount();
  31. $hash = PasswordHasher::hashPassword($password, $readAlgorithm, $salt, $spin);
  32. }
  33. self::assertSame($repassword, $hash);
  34. $spreadsheet->disconnectWorksheets();
  35. $reloadedSpreadsheet->disconnectWorksheets();
  36. }
  37. public function providerPasswords(): array
  38. {
  39. return [
  40. 'Xls basic algorithm' => ['Xls', ''],
  41. 'Xls cannot use SHA512' => ['Xls', 'SHA-512', false],
  42. 'Xlsx basic algorithm' => ['Xlsx', ''],
  43. 'Xlsx can use SHA512' => ['Xlsx', 'SHA-512'],
  44. ];
  45. }
  46. }