Bonjour à tous.

Et bien voila, je viens de finir un petit programme en python qui permet d'uploader/downloader des fichiers sur un serveur http de façon cryptée.

le programme fonctionne très bien... pour les .txt seulement :/
a l'upload, le fichier est encrypté, puis envoyé sur le serveur, au download l'inverse.

les fichier txt sont très bien crypté et décrypter; mais pour les images, les pdf ... ça ne marche pas: les images sont lisible mais complètement désinguées, les pdf vides etc...

je lâche les deux fonction principales de mon scripts,
ainsi que les deux pages complete d'upload/download au cas ou
si quelqu'un pouvait jeter un coup d'oeil

je distribuerai la totalité des sources quand le script serra entièrement fonctionnel.

Cryptage + upload:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class CryptAndUpload(threading.Thread):
    def __init__(self, args=None, kwargs=None):
        threading.Thread.__init__(self)
        self._args = args
        self._kwargs = kwargs
 
    def run(self):
        frame = self._args[1]
        origineFilePath = self._args[0]
        origineFileName = os.path.basename(origineFilePath)
        origineFile = open(origineFilePath)
        origineFileBody = origineFile.read()
        http = httpReq()
        #Cryptage
 
        buf = makebuf(origineFileBody)
        Rand.load_file('randpool.dat', -1)
        s = SMIME.SMIME()
        s.load_key('signer_key.pem', 'signer.pem')
        p7 = s.sign(buf)
        x509 = X509.load_cert('recipient.pem')
        sk = X509.X509_Stack()
        sk.push(x509)
        s.set_x509_stack(sk)
        s.set_cipher(SMIME.Cipher('des_ede3_cbc'))
        tmp = BIO.MemoryBuffer()
        s.write(tmp, p7)
        p7 = s.encrypt(tmp)
        out = BIO.MemoryBuffer()
        s.write(out, p7)
        outputFile = open("./tmp/"+origineFileName, "w+")
        outputFile.write(out.read())
        outputFile.close()
        Rand.save_file('randpool.dat')
        #Upload
 
        repFile = open("tmp.txt", "w+")
        sendFile = open("./tmp/"+origineFileName, "r")
 
        data = {
            'PassWord': frame.param.serverPassword, 
            'name': 'fichier_0',
            'file': sendFile,
        }
 
        page = http.getPage(frame.param.serverUploadPath+"?upload", data)
        repFile.write(page.read())
        repFile.close()
        sendFile.close()
        frame.gauge.SetValue(99)
        os.remove("./tmp/"+origineFileName)
        frame.Gt.SetLabel("Upload Complete!")
        return 1
 
def makebuf(text):
    return BIO.MemoryBuffer(text)
page complète: http://hacker-law.net/perso/CryptUL.txt

donwload + decryptage:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    def onDeCrypt(self, event):
        filePath = self.filesList.GetStringSelection()
        if(filePath):
            http = httpReq()
            http.defineProxy(self.param.proxy)
            registerPath = self.selectFile(filePath)
            #Download
            data = {'PassWord': self.param.serverPassword}
            page = http.getFile(self.param.serverUploadPath+"?file="+filePath, "./tmp/se.p7", data )
            #Reply
            repFile = open("tmp.txt", "w+")
            repFile.write(page.read())
            repFile.close()
            #DeCrypt
            s = SMIME.SMIME()
            s.load_key('recipient_key.pem', 'recipient.pem')
            p7, data = SMIME.smime_load_pkcs7("./tmp/se.p7")
            out = s.decrypt(p7)
            x509 = X509.load_cert('signer.pem')
            sk = X509.X509_Stack()
            sk.push(x509)
            s.set_x509_stack(sk)
            st = X509.X509_Store()
            st.load_info('signer.pem')
            s.set_x509_store(st)
            p7_bio = BIO.MemoryBuffer(out)
            p7, data = SMIME.smime_load_pkcs7_bio(p7_bio)
            v = s.verify(p7)
 
            decryptFile = open(registerPath, "w+")
            decryptFile.write(v)
 
            #os.remove("./tmp/se.p7")
            wx.MessageBox('DeCrypt completed', 'Info')
            return 1
        return 0
page complète: http://hacker-law.net/perso/DeCryptDL.txt

n'hésitez surtout pas a donner votre avis sur le code
Merci beaucoup