2015-11-25 69 views
2

MATLAB .mat文件將在40-50人之間共享,它將包含費用編號。這個.mat用於一些精細的計算,但是除了少數(40-50箇中有1-2個)之外,費用數字不應該公開顯示。加密matlab的部分struct

所以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#@$ 

要留意的是M-腳本使用此文件.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'))'