对伽罗瓦场的里德所罗门编码

时间:2018-04-22 01:06:53

标签: reed-solomon galois-field

我通过Reed Solomon编码器传递一个密钥(长度为16个ASCII字符= 128位),该编码器在Galois字段16(2 ^ 16)上运行。

我的问题是:是否应将此密钥视为128位或256?

我迷路了,因为我知道ASCII字符= 8位,所以16个ASCII字符= 128位。

我读了一篇文章,其中说一旦你通过GF(16)传递密钥,那么它将是256而不是128,我应该只传递一个带有8个ASCII字符的密钥。它是否正确? 请参阅下面我使用Matlab通信工具箱的功能     function code = errorCorrectingCode(data,LENGTH)     %ERRORCORRECTINGCODE获取输入数据并通过Reed-Solomon Code运行     %请参阅以下链接:     %http://www.mathworks.com/help/comm/ref/encode.html     %>>>例如:rsdec(砷(gf([1 2 3; 4 5 6],3),7,3),7,3);

% Apply Reed-Solomon encoding operation to data to obtain ECCed code.

% convert to GF(2^16) elements:
% (two characters map to one element, so 16char = 8)
elements = keyToField(data);
msg = elements';

% create encoding:
code = rsenc(msg,LENGTH,length(msg));

结束

function gfArray = keyToField(keystr)
% KEYTOFIELD takes a key string composed of N characters,
% converting every two characters to a field array in the
% field GF(2^16).

% define number of elements in gfArray as floor(N / 2):
numElts = floor(length(keystr) / 2);
% define flag that checks if keystr is odd or not:
oddLength = mod(length(keystr),2);

% initialize pre-output:
gfArray_bin = zeros((numElts + oddLength),16);

% loop thru pairs of chars in the key:
for idx=1:numElts
curr = 2 * idx;
gfArray_bin(idx,:) = [dec2bin(double(keystr(curr - 1)),8)       dec2bin(double(keystr(curr)),8)] - 48;
end

% take care of last element if odd:
if (oddLength)
gfArray_bin(end,:) = dec2bin(double(keystr(end)),16) - 48;
end

% convert everything to decimal again:
gfArray_dec = zeros(size(gfArray_bin,1),1);
for jdx=1:size(gfArray_bin,1)
% shorthand for current row:
bitrow = gfArray_bin(jdx,:);
% convert from a row of 1's and 0's to decimal representation:
gfArray_dec(jdx) = sum(bitrow .* 2.^(numel(bitrow)-1:-1:0));
end

% generate output by wrapping gfArray_dec in field array:
gfArray = gf(gfArray_dec,16);

end

0 个答案:

没有答案
相关问题