Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I have an Excel workbook.

Two years before I set password protection option for one of the sheets. Now I have forgotten the password. Is there any way to recover the password of that Excel sheet?

share|improve this question

migrated from stackoverflow.com Sep 23 '09 at 21:06

This question came from our site for professional and enthusiast programmers.

1 Answer 1

You cannot recover THE password, but you can unprotect the sheet(The hash used to protect the sheet is quite prone to collisions in the old versions of excel, so generating a collision is quite fast here).

There are scripts availale the will brute force open your sheet within a very short amount of time.

Take a look here for example: http://www.theofficeexperts.com/VBASamples/Excel02.htm

Here's the code:

Sub PasswordBreaker()
  'Author unknown but submitted by brettdj of www.experts-exchange.com

  Dim i As Integer, j As Integer, k As Integer
  Dim l As Integer, m As Integer, n As Integer
  Dim i1 As Integer, i2 As Integer, i3 As Integer
  Dim i4 As Integer, i5 As Integer, i6 As Integer
  On Error Resume Next
  For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
  For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
  For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
  For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126


 ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
      Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
      Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
  If ActiveSheet.ProtectContents = False Then
      MsgBox "One usable password is " & Chr(i) & Chr(j) & _
          Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
          Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
   ActiveWorkbook.Sheets(1).Select
   Range("a1").FormulaR1C1 = Chr(i) & Chr(j) & _
          Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
          Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
       Exit Sub
  End If
  Next: Next: Next: Next: Next: Next
  Next: Next: Next: Next: Next: Next


End Sub
share|improve this answer
    
+1 possible solution. Other way around it..program an app with Apache POI and Digester. Get through the file and copy it without touching the password. (Yes in some ways it is possible) –  user8885 Sep 22 '09 at 9:26
1  
+1 Works like a charm and gets a collision in under 10 seconds. –  Johan Dec 21 '11 at 9:01
    
Wow. Incredible that collisions are (almost?) certain under 194,560 tries. I've had mine at the about 3000th iteration. That's about 17 bits total entropy! –  jonallard Jan 30 '13 at 2:10
    
Any non-vba way? I'm on OSX and the whole file is protected. –  Jonny Jul 11 at 0:59

protected by slhck Oct 16 '12 at 13:11

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?