无法加密numpy阵列

无法加密numpy阵列

问题描述:

我想用AES加密声音信号(.wav)。为此,我正在读的信号转换成numpy的阵列如下:无法加密numpy阵列

a = read("C:\\Users\\Kaushal28\\Desktop\\test.wav") 
data = np.array(a[1],dtype=int) 

现在,这种data阵列,印刷时看起来像如下:

[-2,5] 
[0,-3] 
[1,1] etc. 

我使用以下类为AES加密:

import base64 
import hashlib 
from Crypto import Random 
from Crypto.Cipher import AES 

class AESCipher(object): 
    def __init__(self, key): 
     self.bs = 32 
     self.key = hashlib.sha256(key.encode()).digest() 
    def encrypt(self, raw): 
     raw = self._pad(raw) 
     iv = Random.new().read(AES.block_size) 
     cipher = AES.new(self.key, AES.MODE_CBC, iv) 
     return base64.b64encode(iv + cipher.encrypt(raw)) 
    def decrypt(self, enc): 
     enc = base64.b64decode(enc) 
     iv = enc[:AES.block_size] 
     cipher = AES.new(self.key, AES.MODE_CBC, iv) 
     return self._unpad(cipher.decrypt(enc[AES.block_size:])).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:])] 

可以在这里找到:This SO link..

现在使用这个类,我想加密我的data数组。

我尝试以下操作:

lol = [] 

for i in range (0, data.size): 
    lol.append(AESCipher("a11a454508421079").encrypt(""+data[i]+"")) 

但是,这是给我一些奇怪的错误:

TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U11') dtype('<U11') dtype('<U11') 

我在做什么错在这里?我怎样才能加密整个data阵列?

在这种情况下,您的变量数据包含该numpy数组中每个单独项目的两列。

所以你可以做的是将numpy数组分成两个独立的列明智拆分数组。

您可以使用data = np.hsplit(data,2)。 参考 - https://docs.scipy.org/doc/numpy/reference/generated/numpy.hsplit.html

现在你可以继续解密数据内容。