def test_pkcs8(self): privkey = '''-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDBVAczL3sjEVewm0+XWo/g1QbqM9veVKmETH37CqJrTB/TEg9t /HyRtPCUCnx6sj0xyQPTBRrKZn4D69zqNiRwBOPza6E8QhmUPTtRam4nFbUMj7n7 97gcrUpT2GSdA94Ags3xB0ucCHi/nWEZyfUxGZjb6L3+3NgPoCQknwoV8wIDAQAB AoGAZ/g1qwxU76YK/7p20lHs4KAQCPH8w5PKWpD8i37LnGKjFtM2oxLPN1kUrLj6 +s1SZazSNrEfGEyIZrl45Chb7UcZu2B8ZNve7LpZAPrhkGXv48OJioTsVGYpBEYG viTcrBKHfNT9XfkDwSNR9y4mPDf92vpUYboNox9IcFESzPECQQDf9PDsDnd7zgzZ CGDCnWeVqS/+nEZtZckTlrzsajj/9UmvnvUgHS/o6eQZQPTroB74FMujLL9HShNI F75Mm+7LAkEA3P06ZW009rqvKf3g1E6sHEQvOp7rCD3grLbVSQ8Y9wogYDTZqON8 VvrmawIBHfMkdlLCcU/+QsrWajIZkMOoeQJAHHSb0/J2ngVtPnpBCRlE2xA3J+ul SysepF2HvaY1fdglt6nDzYPH3ZkyQT8un22l4bGKuj3qQ92Wm5dgt40shwJBALJT sgzo3EWBjhovoX8RYTeKGiaO2RCUhjo5a9GB2l53kHqyCzaLI+o4mzmcq3QUocbN r9SqfX4+mlmlxhWYndkCQQCuA/8YrkMrQIZWlErBRldtV1gqoToyexsJjxAuLP0d XM5dHfZ/oq/dqXCUN/iMRG1qxaA7qT4kYb+n6Nb3JYxG -----END RSA PRIVATE KEY-----''' pubkey = '''-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBVAczL3sjEVewm0+XWo/g1Qbq M9veVKmETH37CqJrTB/TEg9t/HyRtPCUCnx6sj0xyQPTBRrKZn4D69zqNiRwBOPz a6E8QhmUPTtRam4nFbUMj7n797gcrUpT2GSdA94Ags3xB0ucCHi/nWEZyfUxGZjb 6L3+3NgPoCQknwoV8wIDAQAB -----END PUBLIC KEY-----''' self.assertEqual(b'test', RSADecrypt(privkey, RSAEncrypt(pubkey, 'test'))) self.assertEqual( b'test', RSADecrypt(privkey.encode("utf-8"), RSAEncrypt(pubkey.encode("utf-8"), 'test')))
def test_RSA(self): plaintext = "Message" ciphertext = RSAEncrypt(pubkey, plaintext) self.assertEqual(plaintext.encode("utf-8"), RSADecrypt(privkey, ciphertext)) # 执行go程序 fp = os.popen('go run %s/RSA-PKCS1-PEM/rsa-pkcs1.go' % self.examplespath) godata = fp.read() fp.close() godata = dict([i.split(": ") for i in godata.split("\n") if i]) self.assertEqual(godata['rsa decrypted'], plaintext) self.assertEqual(RSADecrypt(privkey, godata['rsa encrypt base64']), plaintext.encode("utf-8")) # 执行php程序 fp = os.popen('php %s/RSA-PKCS1-PEM/rsa-pkcs1.php' % self.examplespath) phpdata = fp.read() fp.close() phpdata = phpdata.split("\n") phpdata = phpdata[phpdata.index("public key encrypt:"):] self.assertEqual(phpdata[3], plaintext) self.assertEqual(RSADecrypt(privkey, phpdata[1]), plaintext.encode("utf-8"))
def test_generate_rsa_keys_with_pass(self): passphrase = b"abcde" (pub, pri) = generate_rsa_keys(incall=True, length=1024, passphrase=passphrase) text = b"Hello World!" self.assertEqual( RSADecrypt(pri, RSAEncrypt(pub, text), passphrase=passphrase), text)
def index(): if "GET" == request.method: return render_template("AES-RSA-BS.html", pubkey=pubkey) elif "POST" == request.method: res = dict(code=1, msg=None) username = request.form.get("username") password = request.form.get("password") # decrypt try: password_ret = RSADecrypt(privkey, password) except Exception as e: res.update(msg=str(e)) else: app.logger.debug("username:"******"\n" + "password:"******"\n" + "encryped password: "******"admin" and password_ret and password_ret == "admin": res.update(code=0, password=password_ret) else: res.update(msg="username or password is not match") return jsonify(res)
def process_request(self, request): # if request.path != '/api/serverPublicKey': if request.method == 'POST': #获取header里边加密的aes key encrypted_aeskey = request.META.get('HTTP_KEY') #解密aes key client_aeskey = RSADecrypt(settings.ServerPrivKey, encrypted_aeskey) if client_aeskey == 'ERROR': res = {"status": "5001", "msg": "公钥过期,请从新尝试"} return JsonResponse(res) #把request.body里边的数据从bytes转成字符串 data_str = str(request.body, encoding='utf8') #字符串变字典 data_dict = ast.literal_eval(data_str) #取data的值解密 data_dict['data'] = ast.literal_eval( AESDecrypt(client_aeskey, data_dict['data'])) #解密后的数据转化回bytes赋值request.decryped_data request._body = data_dict request.aeskey = client_aeskey
def test_generate_rsa_keys(self): (pub, pri) = generate_rsa_keys(incall=True) text = b"helloWorld" self.assertEqual(RSADecrypt(pri, RSAEncrypt(pub, text)), text)
def test_RSA(self): plaintext = b"Message" ciphertext = RSAEncrypt(pubkey, plaintext) to_decrypt = RSADecrypt(privkey, ciphertext) self.assertEqual(plaintext, to_decrypt)