Reference(s): http://www.leidecker.info/projects/phrasendrescher/mssql.c https://www.evilfingers.com/tools/GSAuditor.php >>> mssql_passwd(password='testpass', salt='4086ceb6', uppercase=False) '0x01004086ceb60c90646a8ab9889fe3ed8e5c150b5460ece8425a'
(password, salt, uppercase=False)
| 164 | return "0x%s" % (retVal.upper() if uppercase else retVal.lower()) |
| 165 | |
| 166 | def mssql_passwd(password, salt, uppercase=False): # versions '2005' and '2008' |
| 167 | """ |
| 168 | Reference(s): |
| 169 | http://www.leidecker.info/projects/phrasendrescher/mssql.c |
| 170 | https://www.evilfingers.com/tools/GSAuditor.php |
| 171 | |
| 172 | >>> mssql_passwd(password='testpass', salt='4086ceb6', uppercase=False) |
| 173 | '0x01004086ceb60c90646a8ab9889fe3ed8e5c150b5460ece8425a' |
| 174 | """ |
| 175 | |
| 176 | binsalt = decodeHex(salt) |
| 177 | unistr = b"".join((_.encode(UNICODE_ENCODING) + b"\0") if ord(_) < 256 else _.encode(UNICODE_ENCODING) for _ in password) |
| 178 | |
| 179 | retVal = "0100%s%s" % (salt, sha1(unistr + binsalt).hexdigest()) |
| 180 | |
| 181 | return "0x%s" % (retVal.upper() if uppercase else retVal.lower()) |
| 182 | |
| 183 | def mssql_old_passwd(password, salt, uppercase=True): # version '2000' and before |
| 184 | """ |
nothing calls this directly
no test coverage detected
searching dependent graphs…