mirror of
https://github.com/scito/extract_otp_secret_keys.git
synced 2025-12-05 22:34:57 +01:00
- add GUI for QR code capturing from camera (CV2 is used)
- support different QR readers: ZBAR,QREADER,QREADER_DEEP,CV2,CV2_WECHAT
- support several input files
- add option to ignore duplicate otps
- write warnings and errors to stderr
- add output coloring
- rename project from extract_otp_secret_keys to extract_otp_secrets
- improve help
- clean verbose level output
- use Python type hints and check with mypy
- use f-strings
- clean up code
- add more tests
- calculate code coverage
- use src-layout: move files and folders
- support wheel packing
- enhance README.md
- bugfixes
* fix -k -
* fix utf-8 encoding on windows
223 lines
8.7 KiB
Text
223 lines
8.7 KiB
Text
QReader installed: True
|
|
CV2 version: 4.7.0
|
|
QR reading mode: ZBAR
|
|
|
|
Input files: ['example_export.txt']
|
|
Processing infile example_export.txt
|
|
Reading lines of example_export.txt
|
|
# 2FA example from https://www.raspberrypi.org/blog/setting-up-two-factor-authentication-on-your-raspberry-pi/
|
|
|
|
# Secret key: 7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
# otpauth://totp/pi@raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&issuer=raspberrypi
|
|
otpauth-migration://offline?data=CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACjr4JKK%2B%2F%2F%2F%2F%2F8B
|
|
|
|
# otpauth://totp/pi@raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
otpauth-migration://offline?data=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYASAAKLzjp5n4%2F%2F%2F%2F%2FwE%3D
|
|
|
|
# otpauth://totp/pi@raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&issuer=raspberrypi
|
|
# otpauth://totp/pi@raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
otpauth-migration://offline?data=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACiQ7OOa%2Bf%2F%2F%2F%2F8B
|
|
|
|
# otpauth://hotp/hotp%20demo?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&counter=4
|
|
otpauth-migration://offline?data=CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAKNuv15j6%2F%2F%2F%2F%2FwE%3D
|
|
|
|
# otpauth://totp/encoding%3A%20%C2%BF%C3%A4%C3%84%C3%A9%C3%89%3F%20%28demo%29?secret=7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
# Name: "encoding: ¿äÄéÉ? (demo)"
|
|
otpauth-migration://offline?data=CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZGVtbykgASgBMAIQARgBIAAorfCurv%2F%2F%2F%2F%2F%2FAQ%3D%3D
|
|
# 2FA example from https://www.raspberrypi.org/blog/setting-up-two-factor-authentication-on-your-raspberry-pi/
|
|
|
|
# Secret key: 7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
# otpauth://totp/pi@raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&issuer=raspberrypi
|
|
otpauth-migration://offline?data=CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACjr4JKK%2B%2F%2F%2F%2F%2F8B
|
|
|
|
DEBUG: parsed_url=ParseResult(scheme='otpauth-migration', netloc='offline', path='', params='', query='data=CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACjr4JKK%2B%2F%2F%2F%2F%2F8B', fragment='')
|
|
|
|
DEBUG: querystring params={'data': ['CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACjr4JKK+/////8B']}
|
|
|
|
DEBUG: data_base64=CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACjr4JKK+/////8B
|
|
|
|
DEBUG: data_base64_fixed=CjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACjr4JKK+/////8B
|
|
|
|
DEBUG:
|
|
1. Payload Line otp_parameters {
|
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
|
name: "pi@raspberrypi"
|
|
issuer: "raspberrypi"
|
|
algorithm: ALGO_SHA1
|
|
digits: 1
|
|
type: OTP_TOTP
|
|
}
|
|
version: 1
|
|
batch_size: 1
|
|
batch_id: -1320898453
|
|
|
|
|
|
|
|
1. Secret
|
|
|
|
DEBUG: OTP enum type: OTP_TOTP
|
|
Name: pi@raspberrypi
|
|
Secret: 7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
Issuer: raspberrypi
|
|
Type: totp
|
|
otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&issuer=raspberrypi
|
|
|
|
|
|
# otpauth://totp/pi@raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
otpauth-migration://offline?data=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYASAAKLzjp5n4%2F%2F%2F%2F%2FwE%3D
|
|
|
|
DEBUG: parsed_url=ParseResult(scheme='otpauth-migration', netloc='offline', path='', params='', query='data=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYASAAKLzjp5n4%2F%2F%2F%2F%2FwE%3D', fragment='')
|
|
|
|
DEBUG: querystring params={'data': ['CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYASAAKLzjp5n4/////wE=']}
|
|
|
|
DEBUG: data_base64=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYASAAKLzjp5n4/////wE=
|
|
|
|
DEBUG: data_base64_fixed=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACEAEYASAAKLzjp5n4/////wE=
|
|
|
|
DEBUG:
|
|
2. Payload Line otp_parameters {
|
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
|
name: "pi@raspberrypi"
|
|
algorithm: ALGO_SHA1
|
|
digits: 1
|
|
type: OTP_TOTP
|
|
}
|
|
version: 1
|
|
batch_size: 1
|
|
batch_id: -2094403140
|
|
|
|
|
|
|
|
2. Secret
|
|
|
|
DEBUG: OTP enum type: OTP_TOTP
|
|
Name: pi@raspberrypi
|
|
Secret: 7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
Type: totp
|
|
otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
|
|
|
|
# otpauth://totp/pi@raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&issuer=raspberrypi
|
|
# otpauth://totp/pi@raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
otpauth-migration://offline?data=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACiQ7OOa%2Bf%2F%2F%2F%2F8B
|
|
|
|
DEBUG: parsed_url=ParseResult(scheme='otpauth-migration', netloc='offline', path='', params='', query='data=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACiQ7OOa%2Bf%2F%2F%2F%2F8B', fragment='')
|
|
|
|
DEBUG: querystring params={'data': ['CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACiQ7OOa+f////8B']}
|
|
|
|
DEBUG: data_base64=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACiQ7OOa+f////8B
|
|
|
|
DEBUG: data_base64_fixed=CigKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpIAEoATACCjUKEPqlBekzoNEukL7qlsjBCDYSDnBpQHJhc3BiZXJyeXBpGgtyYXNwYmVycnlwaSABKAEwAhABGAEgACiQ7OOa+f////8B
|
|
|
|
DEBUG:
|
|
3. Payload Line otp_parameters {
|
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
|
name: "pi@raspberrypi"
|
|
algorithm: ALGO_SHA1
|
|
digits: 1
|
|
type: OTP_TOTP
|
|
}
|
|
otp_parameters {
|
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
|
name: "pi@raspberrypi"
|
|
issuer: "raspberrypi"
|
|
algorithm: ALGO_SHA1
|
|
digits: 1
|
|
type: OTP_TOTP
|
|
}
|
|
version: 1
|
|
batch_size: 1
|
|
batch_id: -1822886384
|
|
|
|
|
|
|
|
3. Secret
|
|
|
|
DEBUG: OTP enum type: OTP_TOTP
|
|
Name: pi@raspberrypi
|
|
Secret: 7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
Type: totp
|
|
otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
|
|
|
|
4. Secret
|
|
|
|
DEBUG: OTP enum type: OTP_TOTP
|
|
Name: pi@raspberrypi
|
|
Secret: 7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
Issuer: raspberrypi
|
|
Type: totp
|
|
otpauth://totp/pi%40raspberrypi?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&issuer=raspberrypi
|
|
|
|
|
|
# otpauth://hotp/hotp%20demo?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&counter=4
|
|
otpauth-migration://offline?data=CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAKNuv15j6%2F%2F%2F%2F%2FwE%3D
|
|
|
|
DEBUG: parsed_url=ParseResult(scheme='otpauth-migration', netloc='offline', path='', params='', query='data=CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAKNuv15j6%2F%2F%2F%2F%2FwE%3D', fragment='')
|
|
|
|
DEBUG: querystring params={'data': ['CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAKNuv15j6/////wE=']}
|
|
|
|
DEBUG: data_base64=CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAKNuv15j6/////wE=
|
|
|
|
DEBUG: data_base64_fixed=CiUKEPqlBekzoNEukL7qlsjBCDYSCWhvdHAgZGVtbyABKAEwATgEEAEYASAAKNuv15j6/////wE=
|
|
|
|
DEBUG:
|
|
4. Payload Line otp_parameters {
|
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
|
name: "hotp demo"
|
|
algorithm: ALGO_SHA1
|
|
digits: 1
|
|
type: OTP_HOTP
|
|
counter: 4
|
|
}
|
|
version: 1
|
|
batch_size: 1
|
|
batch_id: -1558849573
|
|
|
|
|
|
|
|
5. Secret
|
|
|
|
DEBUG: OTP enum type: OTP_HOTP
|
|
Name: hotp demo
|
|
Secret: 7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
Type: hotp
|
|
Counter: 4
|
|
otpauth://hotp/hotp%20demo?secret=7KSQL2JTUDIS5EF65KLMRQIIGY&counter=4
|
|
|
|
|
|
# otpauth://totp/encoding%3A%20%C2%BF%C3%A4%C3%84%C3%A9%C3%89%3F%20%28demo%29?secret=7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
# Name: "encoding: ¿äÄéÉ? (demo)"
|
|
otpauth-migration://offline?data=CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZGVtbykgASgBMAIQARgBIAAorfCurv%2F%2F%2F%2F%2F%2FAQ%3D%3D
|
|
|
|
DEBUG: parsed_url=ParseResult(scheme='otpauth-migration', netloc='offline', path='', params='', query='data=CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZGVtbykgASgBMAIQARgBIAAorfCurv%2F%2F%2F%2F%2F%2FAQ%3D%3D', fragment='')
|
|
|
|
DEBUG: querystring params={'data': ['CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZGVtbykgASgBMAIQARgBIAAorfCurv//////AQ==']}
|
|
|
|
DEBUG: data_base64=CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZGVtbykgASgBMAIQARgBIAAorfCurv//////AQ==
|
|
|
|
DEBUG: data_base64_fixed=CjYKEPqlBekzoNEukL7qlsjBCDYSHGVuY29kaW5nOiDCv8Okw4TDqcOJPyAoZGVtbykgASgBMAIQARgBIAAorfCurv//////AQ==
|
|
|
|
DEBUG:
|
|
5. Payload Line otp_parameters {
|
|
secret: "\372\245\005\3513\240\321.\220\276\352\226\310\301\0106"
|
|
name: "encoding: ¿äÄéÉ? (demo)"
|
|
algorithm: ALGO_SHA1
|
|
digits: 1
|
|
type: OTP_TOTP
|
|
}
|
|
version: 1
|
|
batch_size: 1
|
|
batch_id: -171198419
|
|
|
|
|
|
|
|
6. Secret
|
|
|
|
DEBUG: OTP enum type: OTP_TOTP
|
|
Name: encoding: ¿äÄéÉ? (demo)
|
|
Secret: 7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
Type: totp
|
|
otpauth://totp/encoding%3A%20%C2%BF%C3%A4%C3%84%C3%A9%C3%89%3F%20%28demo%29?secret=7KSQL2JTUDIS5EF65KLMRQIIGY
|
|
|
|
Extracted 6 otps from 5 otp urls by reading 1 infile
|