I want to encrypt a message such as 'HELO1234 and then decrypt to get the original one.I have written RSA code in matlab which is not working correctly.
PARAMETER CALCULATION
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
ENCRYPTION PROCESS
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
OUTPUT OF encryption process
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
len =
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
DECRYPTION PROCESS
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);
Don't bother implementing it yourself. Writing crypto is hard and bugs have security consequences. Use a well-known library from a trusted vendor.
In Matlab, you can call down to the standard Java cryptography classes included with the JVM bundled with Matlab. The Matlab code will look something like this.
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'))'