2012-02-24 46 views
6

Я хочу зашифровать сообщение, такое как 'HELO1234, а затем расшифровать, чтобы получить исходный. Я написал код RSA в Matlab, который работает неправильно.Код RSA в matlab

ПАРАМЕТР ВЫЧИСЛЕНИЕ

temp=1; 
range=1:10; 
k=isprime(range) 
prime_mat=range(find(k)) 
p=randsample(prime_mat,1); 
q=randsample(prime_mat,1); 
if(p~=q) 
n=p*q; 
phi_n=(p-1)*(q-1); 
u=1:phi_n -1; 
end 
while temp 
enckey=randsample(u,1); 
    deckey=randsample(u,1); 
    if(enckey~=deckey) 
    if(gcd(enckey,phi_n)~=1 ... 
    && gcd(deckey,phi_n)~=1 ... 
    &&gcd(enckey*deckey,phi_n)~=1) 
    temp=1; 
else 
temp=0; 
    end 
    end 
end 

ШИФРОВАНИЕ ПРОЦЕСС

char t= 'hello123'; 
     t=uint8(t); 
     len=length(t) 
     pow=[]; 
     cipher_text=[]; 
      for i=1:len         
       pow=[pow;t(i).^(enckey)]; %each element of the pt matrix(plain text) is raised to the power of encryption key(enc_key) and stored in pow matrix(power matrix) 

    cipher_text=[cipher_text;mod(pow(i),n)];% cipher text is calculate 

д

ВЫВОД процесса шифрования

к =

0  1  1  0  1  0  1  0  0  0 

prime_mat =

2  3  5  7 

р =

7 

д =

2 

п =

14 

enckey =

5 

deckey =

1 

phi_n =

6 

л ан =

28 

cipher_text =

3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 
3 

РАСШИФРОВЫВАНИЕ ПРОЦЕСС

plain_text=[]; 
pow1=[]; 
len1=length(cipher_text); 
for i=1:len 
    pow1=[pow1;cipher_text(i).^(deckey)] 
    plain_text=[plain_text;mod(pow1(i),n)] 

uint8 (plain_text);

+0

Код, который вы отправили, является неполным. И что вы подразумеваете под «неправильной работой»? – Phonon

+1

Попробуйте использовать существующий http: // www.hackchina.com/ru/cont/49303 – Cheery

+0

Что это связано с Java? –

ответ

10

Не беспокойтесь о его внедрении. Написание криптографии сложно, а ошибки имеют последствия для безопасности. Используйте известную библиотеку у доверенного поставщика.

В Matlab вы можете обратиться к стандартным классам криптографии Java, входящим в состав JVM в комплекте с Matlab. Код Matlab будет выглядеть примерно так.

import javax.crypto.Cipher; 

plaintext = 'foobar'; 

cipher = Cipher.getInstance('RSA'); 
keygen = java.security.KeyPairGenerator.getInstance('RSA'); 
keyPair = keygen.genKeyPair(); 
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPrivate()); 

plaintextUnicodeVals = uint16(plaintext); 
plaintextBytes = typecast(plaintextUnicodeVals, 'int8'); 
ciphertext = cipher.doFinal(plaintextBytes)' %' 

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