2012-02-24 125 views
6

Quiero cifrar un mensaje como 'HELO1234 y luego descifrarlo para obtener el original. He escrito código RSA en matlab que no funciona correctamente.Código RSA en matlab

parámetro de cálculo

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 

CIFRADO PROCESO

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 

d

SALIDA DE proceso de cifrado

k =

0  1  1  0  1  0  1  0  0  0 

prime_mat =

2  3  5  7 

p =

7 

q =

2 

n =

14 

enckey =

5 

deckey =

1 

phi_n =

6 

l en =

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 

DESCIFRADO PROCESO

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 (texto_plano);

+0

El código que ha publicado está incompleto. ¿Y a qué te refieres con "no funciona correctamente"? – Phonon

+1

Intenta usar uno existente http: // www.hackchina.com/cont/49303 – Cheery

+0

¿Qué tiene esto que ver con Java? –

Respuesta

10

No se moleste en implementarlo usted mismo. Escribir criptografía es difícil y los errores tienen consecuencias de seguridad. Use una biblioteca bien conocida de un proveedor de confianza.

En Matlab, puede llamar a las clases de criptografía Java estándar incluidas con la JVM incluida con Matlab. El código de Matlab se verá algo así.

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'))'