2017-10-03 9 views
-1

パスワード機能のために後で復号化される文字列を暗号化しようとしています。暗号化ValueError:入力文字列は16の倍数である必要があります

しかし、暗号化しようとすると、入力文字列が16の倍数でなければならないというエラーが表示されます。

これは私の暗号化コードであり、Jasypt2Pythonというライブラリを使用しています。

def test_basic_encryption(self): 
     try: 
      self.ciphertext = "encrypt123" 
      self.j2p = J2PEngine(self.ciphertext) 
      given_ciphertext = self.j2p.encrypt('mypw123.') 
     except Exception: 
      e_str = traceback.format_exc() 
      print(e_str) 

解決方法やパスワードの長さを16の倍数にするにはどうすればよいですか?

+0

長さを16の倍数に塗りつぶすと思われるかもしれませんか? –

+0

まさに私の質問で尋ねていることです。私はそれをどのようにパッドするか分かりません。しかし私は手動で16文字になるように私の文字列を入れてみましたが、それでも同じエラーがあります。 – decemberrobot

+0

J2PEngineクラスのドキュメントはありますか? –

答えて

0

AESなどのほとんどの対称暗号は、いわゆるブロック暗号として動作します。彼らはデータを "ブロックごとに"暗号化します。現代のアルゴリズムは、128ビットブロック(16バイト)を使用します。

データを埋め込むという意味は、文字列 "hello"(ASCII 5バイト)を16バイトに拡張することを意味します。 1つの可能性は、それぞれ11バイトの値11を追加することです。データを解読する場合は、最後のバイト(11)を見て最後からこのバイト数を削除する必要があります。あなたのテキストがすでに16の倍数である場合は、新しいブロックだけをパディング(値16の各バイト)で追加します。

仕様の「PKCS5パディング」を調べます。

関連する問題