1 回答

TA貢獻1797條經驗 獲得超4個贊
更容易的跨語言秘密
雖然可以嘗試找出如何在 Python 中重新創建 Halite 的加密,但我建議在下面移動一層抽象并直接使用 libsodium 的高級加密 API。
用于加密數據的 PHP 代碼變為:
$nonce = \Sodium\randombytes_buf(\Sodium\CRYPTO_SECRETBOX_NONCEBYTES);
$string = "String to be encrypted";
$cipherstring = sodium_crypto_secretbox(
$string, $nonce, $enc_key->getRawKeyMaterial());
$encoder = Halite::chooseEncoder(Halite::ENCODE_BASE64URLSAFE);
$cipherstring = $encoder($cipherstring);
$nonce = $encoder($nonce);
現在你只需要將 nonce 和 cipherstring 獲取到 Python 中,如果你想繼續使用 base64 并使用pynacl包,代碼如下所示:
import nacl.secret
import nacl.encoding
decoder = nacl.encoding.URLSafeBase64Encoder
box = nacl.secret.SecretBox(
# Key goes here, doesn't necessarily have to be base64-encoded
"EtUEpKO2q2clEO5HRL0mk-DtQyHIt7Wf_6t1dSacrFI=", decoder
)
nonce = decoder.decode("Maxm2hN-0C4zqE3viwFVJO03I8eWJcm2")
ciphertext = decoder.decode("TpXjfPonHzBQnObD9JPtPhQc-wKIIq8Y-4o_Um3UtVut-ixCDp4=")
print(box.decrypt(ciphertext, nonce))
基本原理
我這么說的原因是因為如果你深入研究 Halite 的加密代碼,他們基本上已經手動重新實現了許多 secretbox 的功能。似乎 Halite 真的只設計用于 PHP。通過直接使用 libsodium,您可以避免 Halite 更改其協議和破壞您的代碼的可能性。
- 1 回答
- 0 關注
- 197 瀏覽
添加回答
舉報