でbase64でバイト文字列を使用すると、ここで私はHaskellでやろうとしているものです:怠惰なバイト文字列
- (怠惰や厳格な場合は本当に重要ではありません)形式のバイト列でメッセージを取る
- 暗号化メッセージRSA公開鍵
- base64では、私は、内部のハンドルに怠惰なバイト文字列を使用している暗号化されたメッセージ
RSA libraryをコードします。ただし、Base64ライブラリでは、厳密なByteStringのみが使用されます。私のアプリケーションでは、lazy ByteStringsを使用してネットワークソケットにメッセージを送信します。
だから、私はレイジーと厳密なByteStringの間で変換する必要があるようです。 私がしていること:
encrypt :: CryptoRandomGen t => t -> RSA.PublicKey -> L.ByteString -> L.ByteString
encrypt gen pubkey msg = do
let (ciphertext,_) = RSA.encrypt gen pubkey msg
(L.fromChunks . map encode . L.toChunks) $ ciphertext
decrypt :: RSA.PrivateKey -> L.ByteString -> Either String L.ByteString
decrypt privkey ciphertext = do
dec <- decode $ S.concat $ L.toChunks ciphertext
return $ RSA.decrypt privkey $ L.fromChunks [dec]
残念ながら、これは失敗することがあります。このように暗号化されたメッセージを復号化すると、ガベージとそれに続く実際のメッセージが生成されることがあります。私は問題がどこにあるのか正確にはわかりません:それはレイジーから厳密なByteStringへの変換ですか、それともbase64エンコーディングのステップですか?それとも両方ですか?
遅延バイトストリングは、厳密なByteStringチャンクの単なるリストです。メッセージの長さを変換して暗黙的に変更しますか?
私に教えてください。
怠惰なbytestringはモナドな値ではないので、どうやって表記を使用していますか? – dave4420