मैं बेस 64 प्रतिनिधित्व में सॉकेट पर बाहरी प्रक्रियाओं को पारित करने वाली यादृच्छिक स्ट्रिंग को एन्क्रिप्ट करने के लिए Codec.Crypto.RSA का उपयोग कर रहा हूं। बाहरी प्रक्रिया (डिक्रिप्शन के लिए openssl का उपयोग कर एक रूबी प्रोग्राम) कभी-कभी संदेश को डिक्रिप्ट करने में विफल रहता है।Codec.Crypto.RSA: (डिक्रिप्ट। एन्क्रिप्ट)/= आईडी जब पीकेसीएस # 1 v1.5 पैडिंग का उपयोग किया जाता है?
इसे डीबग करने के लिए मैंने हैकेल में एक साधारण स्क्रिप्ट सेट की है जो एक निश्चित संदेश को एन्क्रिप्ट और डिक्रिप्ट करता है, सभी बेस 64 एन्कोडिंग/डिकोडिंग के बिना। मुझे क्या परेशान है कि यह बहुत ही सरल कार्यक्रम कुछ पुनरावृत्तियों के बाद विफलता में पड़ता है। डिक्रिप्ट किए गए सिफरटेक्स्ट मूल संदेश के बराबर नहीं है, हालांकि संदेश डिक्रिप्शन में शामिल है (कुछ अप्रकाशित पात्रों के बाद)।
import Crypto.Random
import qualified Codec.Crypto.RSA as RSA
import qualified Data.ByteString.Lazy.Char8 as L
m :: L.ByteString
m = L.pack "11111222223333344444555556666600"
main = do
gen <- newGenIO :: IO SystemRandom
let (pub, priv, _) = RSA.generateKeyPair gen 1024
doStuff pub priv
doStuff pub priv = do
gen <- newGenIO :: IO SystemRandom
let (e,_) = RSA.encrypt' RSA.UsePKCS1_v1_5 gen pub m
let d = RSA.decrypt' RSA.UsePKCS1_v1_5 priv e
if (m == d)
then do
putStrLn "SUCCESS"
doStuff pub priv
else do
putStrLn "FAILED"
putStrLn $ "expected: " ++ show m
putStrLn $ "got: " ++ show d
टेस्ट स्वीट के रूप में Codec.Crypto.RSA गुजरता के लिए, वहाँ निश्चित रूप से मेरा कार्यक्रम के साथ एक समस्या होना चाहिए:
कोड यह रहा।
RSA.encrypt
साथ RSA.encrypt' RSA.UsePKCS1_v1_5
बदलने के बाद RSA.decrypt
साथ और RSA.decrypt' RSA.UsePKCS1_v1_5
(OAEP को दोषी), विफलता नहीं रह गया है शुरू हो रहा है।
क्या कोई यह देखता है कि यहां क्या गलत है?
[1] मैं बाद में OAEP उपयोग करने की योजना है, लेकिन उत्पन्न सिफर किसी कारण से echo ciphertext | openssl rsautl -oaep -inkey keypair.pem -decrypt
साथ decrypted नहीं किया जा सकता है, लेकिन है कि एक और समस्या है।
अद्यतन: OpenSSL एक के साथ OAEP काम हैश समारोह के रूप में SHA-1 उपयोग करने के लिए है करने के लिए:
cryptOptions :: RSA.EncryptionOptions
cryptOptions = RSA.UseOAEP sha1' (RSA.generate_MGF1 sha1') BS.empty
where sha1' = bytestringDigest . sha1
-- then, to encrypt
enc = RSA.encrypt' cryptOptions gen pubkey
यह बहुत उपयोगी था। धन्यवाद! – rekado
मुझे यह बग monadcryptorandom के लिए बग ट्रैकर में सूचीबद्ध नहीं मिला है, न ही मैंने आगामी रिलीज पर वहां कोई जानकारी देखी है। क्या आप जानते हैं कि अगली रिलीज पैकेज के लेखक से जल्द ही देय है? – rekado
नहीं, मैंने बग के बारे में लेखक/रखरखाव को मेल किया है। चूंकि यह काफी महत्वपूर्ण बात है, इसलिए मैं विस्तार कर रहा हूं कि थॉमस इसे ASAP को ठीक करता है और बिना देरी के ठीक हो जाता है। मैं इसे बग-ट्रैकर में भी जोड़ने जा रहा हूं, मुझे लगता है। –