2012-02-24 23 views
6

私は'HELO1234のようなメッセージを暗号化して元のものを得るために解読したいと思います。正しく動作していないmatlabにRSAコードを書いています。matlabのRSAコード

パラメータ算出

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 

D

暗号化処理の出力

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 

リットル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 

復号処理

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/en/cont/49303 – Cheery

+0

これはJavaと何が関係していますか? –

答えて

10

自分で実装するのはやめてください。暗号を書くことは難しく、バグにはセキュリティ上の影響があります。信頼できるベンダーの有名なライブラリを使用してください。

Matlabでは、MatlabにバンドルされているJVMに含まれている標準のJava暗号化クラスを呼び出すことができます。 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'))'