gpt4 book ai didi

python - 这两个文件的类型有什么区别?

转载 作者:行者123 更新时间:2023-11-28 18:23:54 25 4
gpt4 key购买 nike

我正在尝试使用两个不同的密文文件测试相关功率分析攻击:第一个文件 Ciphertexts.mat 已经通过使用这行代码从 numpy 转换为 matlab:

import scipy.io
import numpy as np

tab_Obs = np.load('C:\\Users\\My_Test_Traces\\Ciphertexts.npy')
scipy.io.savemat('C:\\Users\\My_Test_Traces\\Ciphertexts.mat', {
"tab_Obs":tab_Obs}
)

结果是:

load 'C:/Users/cpa/data/Ciphertexts.mat';
S =
{
ciph_dec =

163 20 11 228 7 53 249 241 134 90 166 177 179 43 86 103
35 22 125 217 16 82 174 101 197 242 118 33 214 232 86 162
77 116 29 212 76 7 155 18 255 101 126 86 235 155 46 11
...........
}

第二个文件是parsed_cipher_0cm.mat:

load 'C:/Users/cpa/data/parsed_cipher_0cm.mat'; 


S =
{
ciph_dec =

67 70 185 254 55 71 60 118 165 27 247 120 31 106 154 24
24 51 124 37 190 187 208 55 32 224 134 214 49 173 224 209
192 86 229 54 24 216 91 9 136 132 131 82 44 170 234 33
.......
}

起初,我认为我有相同的两个相同类型的文件,之后,当我尝试执行第二个文件时,我得到了最好的解决方案,但是通过第二个文件执行得到了这个结果:

error: binary operator `*' not implemented for `int32 matrix' by `matrix' operations
error: evaluating binary operator `*' near line 57, column 10

我的错误是第一个文件的类型,错误是在h1的计算中。我在 matlab 中尝试使用这段代码:

load 'C:/Users/cpa/data/Ciphertexts.mat'; 
%load 'C:/Users/cpa/data/parsed_cipher_0cm.mat';
% truncate measurements
n_measures = 999
tab_Obs = tab_Obs(1:n_measures,:);
ciph_dec = ciph_dec(1:n_measures,:);
K=0:255;
disp (length(K));
Y_i = ciph_dec(:,sbox_n)
F = ones(1,length(K))
sbox_n = 2
disp (size(Y_i))
disp (size(F))
h1=(Y_i*ones(1,length(K)))
disp (size(h1))

我做了这个测试来了解每个文件的类型:我发现:

Ciphertexts.mat---------> type: int32
parsed_cipher_0cm.mat---> type: float64

我需要文件 Ciphertexts.mat 的类型 = float64,请问如何解决这个问题?

最佳答案

MATLAB 通常不允许涉及整数数据类型的矩阵乘法,除非其中一个操作数是标量。我们可以通过一个简单的例子看到这一点:

ones(2, 'int8')*ones(2, 'int8')

抛出错误:

Error using  * 
MTIMES is not fully supported for integer classes. At least one input must be scalar.
To compute elementwise TIMES, use TIMES (.*) instead.

这可能是 integer overflow安全,尽管可能还有其他我不熟悉的原因。尽管错误消息不准确,但问题可能是相关的。

直接的 MATLAB 修复是将 ciph_dec 转换为 double ,这应该可以解决乘法问题:

load 'C:/Users/cpa/data/Ciphertexts.mat'; 
% load 'C:/Users/cpa/data/parsed_cipher_0cm.mat';

% truncate measurements
n_measures = 999;
tab_Obs = tab_Obs(1:n_measures, :);
ciph_dec = double(ciph_dec(1:n_measures, :)); % Force floating point
K = 0:255;
disp(length(K));

Y_i = ciph_dec(:, sbox_n);
F = ones(1, length(K));
sbox_n = 2;

disp(size(Y_i))
disp(size(F))

h1 = (Y_i*ones(1, length(K)));

disp (size(h1))

关于python - 这两个文件的类型有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42860563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com