如何在Redshift上安装python crypto库

时间:2019-07-18 07:39:45

标签: python-2.7 amazon-redshift

我需要对AES进行AES加密和redshift解密。

我的加密和解密代码在我的本地系统上成功运行。但是,在redshift上创建相同代码的库之后,出现以下错误:

  

Amazon无效操作:ImportError:未命名模块   加密密码请查看svl_udf_log以获取更多信息。

请帮助我如何在redshift数据库上添加密码库。

我已按照以下步骤操作:

步骤1: 创建文件AESEncrypt.py,代码如下。

class AESEncrypt(object):
    iv = '1111111111111111'

    def __init__(self):
        self.bs = AES.block_size

    def encrypt(self, raw, key):
        raw = self._pad(raw)
        cipher = AES.new(key, AES.MODE_CBC, self.iv)
        return base64.b64encode(cipher.encrypt(raw))

    def decrypt(self, enc, key):
        enc = base64.b64decode(enc)
        cipher = AES.new(key, AES.MODE_CBC, self.iv)
        return self._unpad(cipher.decrypt(enc)).decode('utf-8')

    def _pad(self, s):
        return s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)

    @staticmethod
    def _unpad(s):
        return s[:-ord(s[len(s)-1:])]


'''
# Testing Code
key = 'my_test_key_0001'
data = 'my_test_data'

aes =  AESEngine()
encString = aes.encrypt(data, key)
print encString

decString = aes.decrypt(encString, key)
print decString
'''

使用此代码进行加密解密。

步骤2: 使用代码创建了一个zip文件(my_functions.zip),并在redshift上创建了一个库

create library all_functions 
language plpythonu 
from 's3://my-bucket/my_functions.zip'
credentials 'aws_access_key_id=my_aws_access_key_id ;aws_secret_access_key=my_aws_secret_access_key'
region as 'my_region'; 

第3步:

CREATE OR REPLACE FUNCTION AES_ENCRYPT (originalVal varchar, key varchar)
RETURNS VARCHAR
STABLE
AS $$
  from my_functions.crypto.AESEncrypt import AESEncrypt
  return AESEncrypt().encrypt(originalVal,key)       
$$ LANGUAGE plpythonu
;

第4步:

select AES_ENCRYPT('my_test_data','my_test_key_0001');
  

Amazon无效操作:ImportError:未命名模块   加密密码请查看svl_udf_log以获取更多信息   详细信息:--------------------------------------------------------------错误:   ImportError:没有名为Crypto.Cipher的模块。请看svl_udf_log   有关更多信息,代码:10000上下文:UDF查询:
  0位置:udf_client.cpp:369进程:padbmaster [pid = 16635]   -----------------------------------------------; [SQL State = XX000,DB Errorcode = 500310] 1条语句失败。

0 个答案:

没有答案