2015-11-25 2 views
2

Файл MATLAB .mat будет разделяться между 40-50 людьми и будет содержать номера затрат. Этот .mat используется для некоторых подробных расчетов, однако номера затрат не следует открывать открыто, за исключением очень немногих (1-2 человека из 40-50).Шифрование частей структуры matlab

Так 1-2 человек хотел бы сохранить «открытую» версию этого файла .mat

a.dim.a = 1 
a.dim.b = 2 
a.dim.c = 3 
a.cost.x = 11 
a.cost.y = 12 

, а затем поместить «скрытый» вариант на общем диске для всех остальных.

a.dim.a = 1 
a.dim.b = 2 
a.dim.c = 3 
a.cost.x = ADSAUJ#$#I 
a.cost.y = SDHAUWH#@$ 

Помните, что м-скрипты работают на этом .mat файл, так ключ шифрование пары не подходит, так как это не та ситуация, когда мы пытаемся держать третьи стороны слежки по нашим данным. Это о том, какой жизни людей немного трудно, но если бы они работали, они могли выставить число. Поэтому я хотел бы спросить, что, на ваш взгляд, лучший способ сделать это?

+0

Без какого-либо контекста это невозможно ответить. Не могли бы вы просто дублировать 'a' и удалять чувствительные части перед отправкой? – David

+0

Чувствительная часть не должна исключаться из-за того, что она будет использоваться для некоторых вычислений на стороне клиента, однако мы не хотим, чтобы клиент мог знать ценность. Мы хотим, чтобы клиент знал конечный результат, который зависит от этого значения. –

ответ

2

Тот факт, что данные находятся в структуре, не имеет особого значения, вопрос заключается в том, как шифровать данные, и, к сожалению, MATLAB не имеет встроенных функций шифрования. Но не бойтесь, поскольку они доступны в Java - к которым можно получить доступ с MATLAB.

Вы можете адаптировать the following вашему требованию:

import javax.crypto.Cipher; 
% The text to encrypt. 
plaintext = 'foobar'; 

% Use RSA  
cipher = Cipher.getInstance('RSA'); 
% Generate a key pair 
keygen = java.security.KeyPairGenerator.getInstance('RSA'); 
keyPair = keygen.genKeyPair(); 
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPrivate()); 

% Convert your input to bytes 
plaintextUnicodeVals = uint16(plaintext); 
plaintextBytes = typecast(plaintextUnicodeVals, 'int8'); 

% Encrypt 
ciphertext = cipher.doFinal(plaintextBytes)' %' 

% And decrypt again... 
cipher.init(Cipher.DECRYPT_MODE, keyPair.getPublic()); 
decryptedBytes = cipher.doFinal(ciphertext); 
decryptedText = char(typecast(decryptedBytes, 'uint16'))' 
Смежные вопросы