0 レビュー
2 回答
php-Pythonで値をわかりにくくする
次の文字列があるとしましょう
a = "123456"
b = "#$%[{\"
c = "ABCDEFG"
これらの3つの文字列を次のプロパティを持つ「d」文字列に変換する必要があります
- 「d」文字列はあいまいです(暗号化する必要はありません)
- 「d」文字列はa、b、c文字列に変換できます(元に戻すことができます)
- 「d」文字列は高速に計算できる必要があります
- 「d」文字列はできるだけ短くする必要があります
これまでのところ、私がしていることは次のようなものです
d = a+"|"+b+"|"+c
d = base64.encode(d)
これまでのところ、base64は文字列をかなり大きくする傾向があるため、これは最初の3つの要件を満たしますが、3番目の要件は満たしません。
他の解決策も検討しています
- XOR暗号化を使用する
- いくつかの質問( CRC32を元に戻す)としてCRC32を使用することを検討してください。元に戻すことは可能かもしれないと述べていますが、それについてはよくわかりません。
最後に、「難読化」の部分はpythonによって行われ、「復元」の部分はphpによって行われることに注意してください。
何かアイデアはありますか?
わからない
0
レビュー
答え :
解決策:
単純なシーザー暗号を実行できます:
from string import printable as alphabet
import string
def caesar(plaintext, shift):
shifted_alphabet = alphabet[shift:] + alphabet[:shift]
table = string.maketrans(alphabet, shifted_alphabet)
return plaintext.translate(table)
shift=3
for s in ("123456","#$%[{\\","ABCDEFG"):
coded=caesar(s,shift)
print s
print coded
print caesar(coded,-shift)
print
プリント:
123456
456789
123456
#$%[{\
&'(^~_
#$%[{\
ABCDEFG
DEFGHIJ
ABCDEFG
定義上、文字列は長くなったり短くなったりしません。私はあなたの例を処理するためにコードを微調整しました。
わからない
0
レビュー
答え :
解決策:
文字列が例より少し長い場合は、 zlib
モジュールが適している可能性があります適合:
>>> import zlib
>>> zlib .compress( "123456789123456789")
'x \ x9c3426153 \ xb7 \ xb04 \ x841 \ x00#\ x01 \ x03 \ xbb'
>>> zlib .decompress(_)
'123456789123456789'
ただし、フォーマットのオーバーヘッドのため、短い文字列は長くなる傾向があります:
>>> zlib .compress( "1234")
'x \ x9c3426 \ x01 \ x00 \ x01 \ xf8 \ x00 \ xcb'
解凍は、PHPの gzuncompress
を使用して実行できます。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。