شبیه‌سازی شبکه‌های بی سیم و کامپیوتری
شبیه سازی تخصصی شبکه‌های بی سیم و کامپیوتری مقاطع کارشناسی تا دکترا
  • شبیه سازی تخصصی شبکه‌های بی سیم و کامپیوتری مقاطع کارشناسی تا دکترا

مشخصات بلاگ
شبیه‌سازی شبکه‌های بی سیم و کامپیوتری

امکان سفارش، شبیه سازی مقاله و پایان نامه وجود دارد،
مطالب، با ذکر منبع قابل انتشار در سایت ها و وبلاگ ها و.. می باشد.
جهت دریافت مشاوره رایگان تماس بگیرید:

شماره تماس: 09147082079-0098
آیدی تلگرامی:https://t.me/MuosSA_NbO
جی میل :mo30no@gmail.com

تمامی کدهای این وبلاگ در حال حاضر به زبان متلب می باشد

«آنچه می‌دانیم ناچیز و آنچه نمی‌دانیم عظیم و وسیع است»
$$پیر سیمون لاپلاس$$

۲ مطلب با کلمه‌ی کلیدی «کد متلب» ثبت شده است

همانطور که می‌دونید معادله عمومی منحنی بیضوی به شکل y2 = x3 + ax + b می‌‍باشد که در ورژن بیت کوین مقدار ضریب a برابر صفر و مقدار ثابت b برابر 7 می‌باشد. نمای کلی منحنی بیضوی بیت کوین به شکل زیر می‌باشد:

 

از ویژگی‌های جالب این منحنی عبارتند از:
1-  اگر دو نقطه را در روی منحنی انتخاب کنید که خط واصل آن‌ها عمودی نباشد، خط واصل این دو نقطه، نقطه سومی را روی منحنی قطع خواهد کرد، که اگر این  نقطه را نسبت به محور xها متقارن کنیم، حاصل آن برابر با حاصل جمع دو نقطه اولیه خواهد بود...(point adding)

برای اضافه کردن دو نقطه به هم از روابط زیر استفاده می‌شود، که rx و ry حاصل اضافه کردن این دو نقطه می‌باشد.

c = (qy – py) / (qx – px)
rx = c2 – px – qx
ry = c (px – rx) – py


2- اگر یک نقطه ای را در روی این نمودار انتخاب کنیم، و چند بار ان نقطه را با خودش جمع کنیم، دوباره نقطه جدید روی این منحنی خواهد افتاد.(point doubling)

برای اضافه کردن یک نقطه به خودش از روابط زیر استفاده می‌شود، که rx و ry حاصل اضافه کردن این نقطه به خودش می‌باشد.

c = (3px2 + a) / 2py
rx = c2 – 2px
ry = c (px – rx) – py

 

در ادامه کد متلب پیاده‌سازی این عملیات را می‌توانید به شکل زیر مشاهده کنید:

clc;
clear;
close all;
% An elliptic curve is represented algebraically as an equation of the form
% y2 = x^3 + ax + b  ,For a = 0 and b = 7 (the version used by bitcoin), it looks like this y2 = x^3 + 7 

x=- nthroot(7,3):0.02: nthroot(7,3)*5; y = sqrt(((x.^3) +7));
 plot(x, real(y),'r- ', 'lineWidth',1);hold on;
 plot(x,-real(y),'r- ', 'lineWidth',1);hold on;



%% point adding
px=x(5) ;py=real(y(5)) ;qx=x(500) ; qy=real(y(500)) ;
c = (qy - py) /  (qx - px) ;
rx = (c^2)  - px - qx;
ry = c* (px-rx) -py;
 [X,Y]=polyxpoly( [px,qx],[py,qy],x,real(y)); 
plot([px,qx],[py,qy],'r*-')
plot( X,Y,'go-');hold on;
plot( rx,ry,'ko-');hold on;
text( rx,ry,'point adding');


%% point doubling
px=x(60) ;py=real(y(25)) ;
c = (3*(px^2) + 0) / (2*py);
rx = (c^2)  - (2*px);
ry = c*(px - rx) - py;

plot( px,py ,'cd-')
plot( rx,ry,'co-');
text( rx,ry,'point doubling');

نمونه خروجی:


این پست با پیاده‌سازی کامل بروزرسانی خواهد شد.....

مطالعه بیشتر...

۰ نظر موافقین ۰ مخالفین ۰ ۲۵ آذر ۹۸ ، ۱۳:۳۹
موسی حسن زاده
پنجشنبه, ۱۴ آذر ۱۳۹۸، ۱۰:۴۱ ق.ظ

کد الگوریتم RSA در متلب

دو عدد اول از شما درخواست می کنه، بعد از آماده سازی کلید های خصوصی و عمومی یک متن را از شما خواهد خواست یا اینکه شما می تونید با یک سری تغییراتی یک بردار عددی را مستقیما به الگوریتم تحویل بدید، چون متن در نهایت به کد اسکی اون تبدیل می شه، بعد الگوریتم، متن رمزگذاری شده و متن رمزگشایی  شده را به همراه کد اسکی متن رمزگذاری شده و رمزگشایی شده به شما برمی گردونه...

 

clc;% clear theconsol
clear;%clear the memory and variables
delete(allchild(0)); %close all open diologs

file=matlab.desktop.editor.getActive;
try
      fileDetail=dir(file.Filename);
      folderName=fileDetail.folder;
catch
      index=strfind( file.Filename,'\');
      folderName=file.Filename(1:index(end)-1);
end
paths=genpath(folderName);
addpath(paths);
cd(folderName);

disp('RSA algorithm');
p=input('Enter the prime no. for p: ');
q=input('Enter the prime no. for q: ');
n=p*q;
fprintf('\nn=%d',n);
phi=(p-1)*(q-1);
fprintf('\nphi(%d) is %d',n,phi);

e=randsample( primes(n-1),1);

val1=0;
d=0;
while(val1~=1)
d=d+1;
val1=mod(d*e,phi);
end
fprintf('\nd=%d',d);
fprintf('\nPublic key is (%d,%d)',e,n);
fprintf('\nPrivate key is (%d,%d)',d,n);
m=input('\nEnter the message: ','s');
m1=m-0;
disp('ASCII equivalent of message ');
disp(m1);
over=length(m1);
 o=1;
 while(o<=over)
    m=m1(o);
    diff=0;
    if(m>n)
        diff=m-n+1;
    end
    m=m-diff;
      
    
    
    % beacause matlab dont support larg number modulus operation then
    % encription and deription is done in bit level
qm=dec2bin(e);
len=length(qm);
c=1;
xz=1;
while(xz<=len)  
    if(qm(xz)=='1')
      c=mod(mod((c^2),n)*m,n);
    elseif(qm(xz)=='0')
        c=(mod(c^2,n));
    end
    xz=xz+1;
end
c1(o)=c;
c1(o)=mod(m^e ,n);
% nm2(o)=mod(c1(o)^d ,n)+diff; 


% Public key is (e,n) => (7,33)
% Private key is (d,n) => (3,33)
% The encryption of m = 2 is c = 27 % 33 = 29
% The decryption of c = 29 id m =293 % 33 = 2




qm1=dec2bin(d);
len1=length(qm1);
nm=1;
xy=1;
while(xy<=len1)    
    if(qm1(xy)=='1')
       nm=mod(mod((nm^2),n)*c,n);
    elseif(qm1(xy)=='0')
        nm=(mod(nm^2,n));
    end
     xy=xy+1;    
end
nm=nm+diff;
nm1(o)=char(nm);
o=o+1;
 end
 
 
o=1;

fprintf('\nThe encrypted message in ASCII is \n');
 while(o<=over)
   fprintf('\t%d',c1(o)); 
   o=o+1;
end
o=1;

fprintf('\nThe encrypted message is \n');
disp(char(c1))


fprintf('\nThe decrypted message in ASCII is \n');
while(o<=over)
fprintf('\t%d',nm1(o));
o=o+1;
end
fprintf('\nThe decrypted message is: ');
disp(nm1);
fprintf('\n');

 

۰ نظر موافقین ۰ مخالفین ۰ ۱۴ آذر ۹۸ ، ۱۰:۴۱
موسی حسن زاده