App EngineでPyCryptoを使用したPython UnicodeEncodeError

暗号化されたクエリ文字列を別のURLに渡そうとしています。

次のコードは私にこのエラーを与えます:

UnicodeEncodeError: ‘ascii’コーデックで文字u ‘ u04b7’をエンコードできません
  ポジション7:序数が範囲外(128)

The encryption module is PyCrypto

App EngineでのPython 2.5.2の実行

ページA

    import Crypto
    from Crypto.Cipher import ARC4

    obj=ARC4.new('stackoverflow')
    msg = 'This is my secret msg'
    encrypted = obj.encrypt(msg);

    self.redirect('/pageb?' + urllib.urlencode({'q': encrypted}))

ページB

    import Crypto
    from Crypto.Cipher import ARC4

    encrypted = self.request.get('q')
    obj=ARC4.new('stackoverflow')
    decrypted = obj.decrypt(encrypted)

    get_data = cgi.parse_qs(decrypted)

    self.response.out.write(decrypted)
    self.response.out.write(pprint.pprint(get_data))

トレースバック

トレースバック (most recent call last):
  File "C:Program FilesGooglegoogle_appenginegoogleappengineextwebapp_webapp25.py", line 701, in __call__
    handler.get(*groups)
  File "C:Program FilesGooglegoogle_appenginedemosguestbookguestbook.py", line 47, in get
    decrypted = obj.decrypt(encrypted)
UnicodeEncodeError: 'ascii' codec can't encode character u'u04b7' in position 7: ordinal not in range(128)
ベストアンサー

一般的なガイドライン:暗号化されたものにbase64エンコード/デコードのステップを追加します。

import base64

base64_encrypted_message = base64.b64encode(encrypted_message)
// send your message via POST as GET can be seen on system logs

encrypted_message = base64.b64decode(base64_encrypted_message)
// decrypt your message

For the other error, try reading up on unicode &
utf-8
encoding of non-ascii characters. You need this step
before passing it to your de/encrypt function.

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です