この記事は、Huawei Cloud Community「暗号化アルゴリズム」から共有されたものです | Python で一般的に使用されるいくつかの暗号化アルゴリズムは、自動テスト中に実装されます。それらを使用したことがありますか? 』、著者:鄭武耶。
前に書く
- 最近自動テストを行っているときに、インターフェイスによって要求されたパスワードが暗号化されているという問題が発生しました。
- この製品の要件は、他の特別な手段を使用できないことですが、暗号化アルゴリズムを提供し、インターフェース要求を行う際にパラメーターを渡すために暗号化アルゴリズムによって処理されたデータを使用する必要があります。
- 実際、これを言うのははるかに簡単です。暗号化アルゴリズムはすでに知っているので、パラメーターを渡す前にパスワードを暗号化するだけです (私は静かに、この製品は優秀すぎると思います)。
- この記事では主に、その後のテストのためにいくつかの暗号化アルゴリズムを整理します。
公開データ
- 後続の例を容易にするために、実証する必要がある暗号化アルゴリズムを均一にカプセル化するクラスを設計します。
# -*-coding:utf-8 -*- # 著者: Chong Wuya # 日付: 2023/12/1 # ファイル名: test_pass.py # 機能: 一般的に使用される暗号化アルゴリズムの実装 # 連絡先: VX (NoamaNelson) # ブログ:https://blog.csdn.net/NoamaNelson import hashlib class TestPass(): def __init__(self): super(TestPass, self).__init__() self.name = "admin" self.password = "123456" if __name__ == "__main__": test_pass = TestPass()
- このうち、self.name はユーザー名データをシミュレートし、self.password はパスワード データをシミュレートします。
MD5直接暗号化
- MD5 は一般的に使用される一方向ハッシュ関数であり、不可逆的です。つまり、暗号化された結果から暗号化前のコンテンツを判断することはできません。
- 生成された結果は固定の 128 ビット バイトで、通常は 32 ビットの 16 進文字列です。
- ここでは Hashlib が使用されます。これは通常、Python のインストール後に使用できます。ディレクトリは次のとおりです。
X:\Python37\Lib\hashlib.py
- 直接暗号化の実装:
def test_md5(self): md = hashlib.md5(self.password.encode()) md5_pass = md.hexdigest() print(f"パスワード {self.password}, 直接暗号化された md5 は: {md5_pass}")
- 出力は次のとおりです。
パスワードは 123456 で、MD5 による直接暗号化後のパスワードは e10adc3949ba59abbe56e057f20f883e になります。
ユーザー名とパスワードの組み合わせ MD5 暗号化
- 実際のビジネス シナリオでは、特定のビジネス システムをテストする場合、単純なパスワード MD5 暗号化ではありません。
- 代わりに、ユーザー名とパスワードの組み合わせを使用し、最初に小文字に変換してから md5 で暗号化します。
- この要件の実装プロセスは次のとおりです。
def test_md5_01(self): data = (self.name + self.password). lower() md = hashlib.md5(data.encode()) md5_pass = md.hexdigest() print(f"Password{self.password} ,ユーザー名 {self.name}、MD5 組み合わせ暗号化は: {md5_pass}")
- 出力は次のとおりです。
パスワード 123456、ユーザー名 admin、暗号化後の md5 の組み合わせは次のとおりです: a66abb5684c45962d887564f08346e8d
パスワードはMD5+ソルトを使用して暗号化されています
- このシナリオでは、最初にパスワードにソルトが適用されます。
- 次に、元のパスワードの後にソルトを接続します。
- 実装プロセスは次のとおりです。
def test_md5_02(self): s = self.password[:5] #Set Salt md = hashlib.md5((self.password + s).encode()) md5_pass = md.hexdigest() print(f"password{self) .password}、md5 にソルトを追加した後: {md5_pass}")
- 出力は次のとおりです。
md5 にソルトを適用した後のパスワードは 123456: e363373ddc24b34c5bb9d99abbfd8be5
MD5 ソルティング後、パスワード全体がソルトに挿入されます。
- このシナリオも非常に一般的です。つまり、最初に塩を設定します。
- 次に、join メソッドを使用して元のパスワードとソルトを処理します。
- 実装プロセスは次のとおりです。
def test_md5_03(self): s = self.password[:6] # ソルトを設定します md = hashlib.md5((self.password.join(s)).encode()) md5_pass = md.hexdigest() print(f"パスワード {self.password}、MD5 ソルティングの JSON メソッドは: {md5_pass}")
- 出力は次のとおりです。
パスワード 123456、json メソッドを使用した md5 ソルトは: 43ec0d3f863b4f7e635e7169ddc18606
SHA1暗号化
- これは MD5 に似ていますが、結果は 160 ビット バイト (通常は 40 ビットの 16 進文字列) になります。
- これは hashlib にもあります。
- ユーザー名とパスワードは連結され、SHA1 を使用して暗号化されます。実装は次のとおりです。
def test_sha1(self): data = self.name + self.password sha1 = hashlib.sha1() sha1.update(data.encode("utf-8")) sha1_pass = sha1.hexdigest() print(f"password{ self.password}、ユーザー名 {self.name}、sha1 結合暗号化は: {sha1_pass}")
- 出力は次のとおりです。
パスワード 123456、ユーザー名 admin、暗号化後の sha1 の組み合わせは次のとおりです: cd5ea73cd58f827fa78eef7197b8ee606c99b2e6
SHA256暗号化
- SHA256 は SHA1 よりも安全ですが、速度が遅く、結果が得られるまでに時間がかかります。
- ユーザー名とパスワードは連結され、SHA256 を使用して暗号化されます。実装は次のとおりです。
def test_sha256(self): data = self.name + self.password sha256 = hashlib.sha256() sha256.update(data.encode("utf-8")) sha1_pass = sha256.hexdigest() print(f"password{ self.password}、ユーザー名 {self.name}、sha256 組み合わせ暗号化は: {sha1_pass}")
- 出力は次のとおりです。
パスワード 123456、ユーザー名 admin、sha256 組み合わせ暗号化は: ac0e7d037817094e9e0b4441f9bae3209d67b02fa484917065f71b16109a1a78
- もちろん、SHA512 もありますが、これについては説明しませんが、同じ原理が証明できます。
HMAC 暗号化
- 実際、私は自動化プロセスではこれをあまり使用しませんが、非常に一般的な暗号化アルゴリズムでもあります。
- HMAC は、暗号化ハッシュ関数と共有キーに基づくメッセージ認証プロトコルです。
- hmac ライブラリを使用する必要があります。ディレクトリは次のとおりです。
X:\Python37\Lib\hmac.py
- パラメータは 3 つあり、1 つはキー、1 つは暗号化する文字列、1 つはハッシュ関数です。例は次のとおりです。
def test_hmac(self): hm = hmac.new(b'029-11111111', bytes(self.password, 'utf-8'), hashlib.md5) hm.digest() hmac_pass = hm.hexdigest() print( f「パスワード {self.password}、ユーザー名 {self.name}、HMAC 暗号化後: {hmac_pass}」)
- 出力は次のとおりです。
パスワード 123456、ユーザー名 admin、hmac 暗号化: 4e32d965d8965df4c7f6aaaf68791e86
その他のアルゴリズム
- もちろん、DES、AES、RSA、ECC など、いくつかのアルゴリズムがありますが、ここでは詳しく説明しません。
- 後で時間があるときに追加します。
この記事のソースコード
# -*-coding:utf-8 -*- # 著者: Chong Wuya # 日付: 2023/12/1 # ファイル名: test_pass.py # 機能: 一般的に使用される暗号化アルゴリズムの実装 # 連絡先: VX (NoamaNelson) # ブログ:https://blog.csdn.net/NoamaNelson import hashlib import hmac class TestPass(): def __init__(self): super(TestPass, self).__init__() self.name = "admin" self.password = "123456 " def test_md5(self): md = hashlib.md5(self.password.encode()) md5_pass = md.hexdigest() print(f"パスワード {self.password}、直接暗号化された md5 は: {md5_pass}" ) def test_md5_01(self): data = (self.name + self.password). lower() md = hashlib.md5(data.encode()) md5_pass = md.hexdigest() print(f"Password{self.password } ,ユーザー名 {self.name}、md5 組み合わせ暗号化は: {md5_pass}") def test_md5_02(self): s = self.password[:5] # ソルトを設定 md = hashlib.md5((self.password + s ).encode()) md5_pass = md.hexdigest() print(f"パスワード {self.password}、md5 がソルト化された後: {md5_pass}") def test_md5_03(self): s = self.password[:6 ] # Salt を設定します md = hashlib.md5((self.password.join(s)).encode()) md5_pass = md.hexdigest() print(f"Password{self.password}、追加するための JSON メソッドmd5 ソルトは: {md5_pass}") def test_sha1(self): data = self.name + self.password sha1 = hashlib.sha1() sha1.update(data.encode("utf-8")) sha1_pass = sha1。 hexdigest() print (f"パスワード {self.password}、ユーザー名 {self.name}、sha1 結合暗号化は: {sha1_pass}") def test_sha256(self): data = self.name + self.password sha256 = hashlib.sha256( ) sha256.update(data.encode("utf-8")) sha1_pass = sha256.hexdigest() print(f"パスワード {self.password}、ユーザー名 {self.name}、sha256 組み合わせ暗号化は: {sha1_pass }") def test_hmac(self): hm = hmac.new(b'029-11111111', bytes(self.password, 'utf-8'), hashlib.md5) hm.digest() hmac_pass = hm.hexdigest( ) print(f"パスワード {self.password}, ユーザー名 {self.name}, hmac 暗号化後: {hmac_pass}") if __name__ == "__main__": test_pass = TestPass() # test_pass. test_md5() # test_pass.test_md5_01() # test_pass.test_md5_02() # test_pass.test_md5_03() # test_pass.test_sha1() # test_pass.test_sha256() test_pass.test_hmac()
クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~
IntelliJ IDEA 2023.3 と JetBrains Family Bucket の年次メジャー バージョン アップデート 新しいコンセプト「防御型プログラミング」: 安定した仕事に就く GitHub.com では 1,200 を超える MySQL ホストが稼働していますが、8.0 にシームレスにアップグレードするにはどうすればよいですか? Stephen Chow の Web3 チームは来月、独立したアプリをリリースする予定ですが、 Firefox は廃止されるのでしょうか? Visual Studio Code 1.85 がリリース、フローティング ウィンドウ 米国 CISA、メモリ セキュリティの脆弱性を排除するために C/C++ の放棄を推奨 余成東 : ファーウェイは来年破壊的製品を発売し、業界の歴史を書き換える TIOBE 12 月: C# は今年のプログラミング言語になると期待される 論文30年前にLei Junが書いた「コンピュータウイルス判定エキスパートシステムの原理と設計」
{{名前}}
{{名前}}