界面实现rsa

今天去答辩,老师叫我回去做一个界面。我想问,老师,不是说话第一类的不做界面么现在又要做界面是什么回事?

╮(╯▽╰)╭  算了八  还是好好的敲代码八 下面就是修改过后的。  用SDK写的界面。

 

#include <windows.h>
#include "resource.h"
#include<tchar.h>
#include <stdio.h>
#include <math.h>
#include <windowsx.h>
int length = 0;
 char str2[20]={0};
static long int e ,n ,m,c,d;
HINSTANCE hins ;
TCHAR cD[20][30];
int flag = 0,str3[20]={0};
BOOL CALLBACK DlgMain(HWND hwnd,UINT message,WPARAM  wParam,    LPARAM  lParam);
bool JudgeP (int prime)             //判断是不是素数
{
    int i=0;
    long double temp=0 ;
    if (prime == 0||prime == 2)
        return false;
    else
    {
    temp =sqrt((float)prime);
    for (i=2;i<=temp;i++)
    {
        if (prime%i == 0)
                return false;       //输入的不是素数
    }
    return true ;                    //输入的数是素数
    }

}
int gcd(int a , int b){
    return b==0?a:gcd(b,a%b);
}
bool  CheckE ( int f_n ,int e)        //判断e是否符合要求  1<e <f_n且e 与f_n互素
{
    int k ;

    while (e > f_n || e<= 1)                        //确定e的范围
    {
        return false;
    }
    k =gcd(f_n,e) ;
       if ( k !=1)
           return false;
       return  true ;
}
long int  CalculateD(long int  f_n ,long  int e)     //辗转相除
{
    int i , j = 1 , t1 , t2= 1 , k = 0  , m ;

    int arry_1[30] = {f_n,e} ,arry_2[30] ={0} ;
    printf(" the Calculation:\n") ;
    for (i=1 ;arry_1[i] != 1; i ++)                //用数组存放好辗转相除过程中的数据
    {
        arry_1[i+1] =arry_1[i-1]%arry_1[i] ;
        arry_2 [i-1] = arry_1[i-1]/arry_1[i] ;
        wsprintf(cD[i],L" %d = %d*%d+%d\n",arry_1[i-1],arry_1[i],arry_2[i-1],arry_1[i+1] ) ;
    }
    flag = i;
    t1 = 1 ;
    t2 = -arry_2[i-2] ;
    while((i-2)!=0 )
    {
        m = t1 ;
        t1 = t2  ;
        if (j%2 != 0)
            t2 = (abs(m)+arry_2[i-3]*abs(t2));
        else
            t2 = -(abs(m)+arry_2[i-3]*abs(t2));
        i -- ;
        j++ ;
    }

    while(t2 < 0)    //保证D是大于0正数
    {
        t2 = f_n + t2 ;
    }
    k = t2 ;
    while(t2 = t2/f_n)
    {
        k = t2%f_n      ;
    }
    printf("D = %d\n",k);

    return k ;
}
int  * Dec2Bin(int e ) //转换为二进制
 {
  int i = 0 ;
  int str1[20];
 while(e)
 {
  str1[i] = e%2 ;
  e = e/2 ;
   i++ ;
 }
 i -- ;
 for (length = 0 ; i>=0 ; length ++)          //这里赋值的。Ok
 {
 str2[length] = str1[i] +‘0‘;   //这里是二进制的  只有10
 str3[length] = str1[i];
 i -- ;
 }
 str2[length]=‘\0‘;
 return str3 ;
 }
int  Encrypt(int m , int e , int n)  //平方乘法
 {
     int  c =1  , i ;
     int *p =  Dec2Bin(e) ;

     for (i = 0  ; i < length;i ++)
     {
         c = c %n;
         c =c*c%n ;
          if (*(p+i) == 1)
         { c =c%n;
          c =c*m%n;
          }
     }
     return c ;
 }
int WINAPI WinMain(    HINSTANCE hInstance,HINSTANCE hPrevInst, LPSTR lpszCmdLine,    int    nCmdShow)
{

    DialogBox(hInstance,(LPCWSTR)IDD_DIALOG1,NULL,DlgMain);
    return 0 ;
}
BOOL CALLBACK DlgEncrpty(HWND hwnd,UINT message,WPARAM  wParam,    LPARAM  lParam)
{
    TCHAR mesg[20] ={L""};
    TCHAR buff[512] ={L""};//最好不要用L 用TEXT
    switch (message)
    {
    case WM_INITDIALOG:
        wsprintf(mesg,L"(%d,%d)",e ,n );
        SetDlgItemText(hwnd,IDC_EDIT1,mesg);
        SetDlgItemTextA(hwnd,IDC_EDIT2,str2);
        SetDlgItemInt(hwnd,IDC_EDIT3,c,TRUE);
        break;
    case WM_DESTROY:
        ShowWindow(hwnd,SW_HIDE);
        break;
    case WM_CLOSE:
        ShowWindow(hwnd,SW_HIDE);
        break;
    }
    return 0 ;
}
BOOL CALLBACK DlgDecrption(HWND hwnd,UINT message,WPARAM  wParam,    LPARAM  lParam)
{
    HWND hlist =GetDlgItem(hwnd,IDC_LIST1);
    TCHAR mesg[20] ={L""};
    TCHAR buff[512] ={L""};//最好不要用L 用TEXT
    switch (message)
    {
    case WM_INITDIALOG:
        wsprintf(mesg,L"(%d,%d)",e ,n );
        SetDlgItemText(hwnd,IDC_EDIT1,mesg);
        SetDlgItemTextA(hwnd,IDC_EDIT2,str2);
        SetDlgItemInt(hwnd,IDC_EDIT3,m,TRUE);

        for (int i=0;i< flag;i++)
        {
            ListBox_AddString(hlist,cD[i]);
        }
        break;
    case WM_DESTROY:
        ShowWindow(hwnd,SW_HIDE);
        break;
    case WM_CLOSE:
        ShowWindow(hwnd,SW_HIDE);
        break;
    }
    return 0 ;
}
BOOL CALLBACK DlgMain(HWND hwnd,UINT message,WPARAM  wParam,    LPARAM  lParam)
{
    long int p,q ,f_n;
    int choice = 0;
    BOOL flag ;
            switch(message)
        {

            case  WM_COMMAND:
                switch (LOWORD(wParam))
                {
                case IDOK:
                    p = GetDlgItemInt(hwnd,IDC_EDIT1,&flag,TRUE);
                    if (!JudgeP(p))
                    MessageBox(hwnd,L"p不是素数",L"警告",MB_OK);
                    else
                    {
                    q =GetDlgItemInt(hwnd,IDC_EDIT2,&flag,TRUE);
                                        if (!JudgeP(q))
                                        {
                    MessageBox(hwnd,L"q不是素数",L"警告",MB_OK);
                                        }
                                        else
                                        {
                                            f_n =(p-1)*(q-1);
                    e =GetDlgItemInt(hwnd,IDC_EDIT3,&flag,TRUE);
                    if (!CheckE(f_n,e))
                        MessageBox(hwnd,L"请注意e的范围 而且e要与(p-1)*(q-1)互素",L"错误",MB_OK);
                    else
                    {
                    choice =IsDlgButtonChecked(hwnd,IDC_RADIO3);
                    choice = IsDlgButtonChecked(hwnd,IDC_RADIO4);
                    n = p*q ;
                    switch (choice)
                    {
                    case 0:                           //加密
                        m =GetDlgItemInt(hwnd,IDC_EDIT4,&flag,TRUE);
                        c =Encrypt(m,e,n);
                        DialogBox(hins,(LPCWSTR)IDD_DIALOG2,NULL,DlgEncrpty);
                        break;
                    case 1:                          //解密
                        c = GetDlgItemInt(hwnd,IDC_EDIT5,&flag,TRUE);
                        d=CalculateD(f_n,e);
                        m=Encrypt(c,d,n);
                        DialogBox(hins,(LPCWSTR)IDD_DIALOG3,NULL,DlgDecrption);
                        break;
                    }
                    }}
                                                            }
                    break;
                }
                break;
            case WM_DESTROY:
            PostQuitMessage(0);                    //调用PostQuitMessage发出WM_QUIT消息
            break;
            case WM_CLOSE:
                DestroyWindow(hwnd);
                break;
        }
    return 0;
}

在这个遇到的那题是  如何一个int型的数组放到edit空间输出。表示脑袋太笨,很久才做出来。噗。。

实现主界面:

输出加密后的界面:

输出界面的界面:

时间: 2024-11-08 14:48:51

界面实现rsa的相关文章

关于Citrix与RSA认证结合认证模式

在一些项目中,Citrix的项目除了AD的常用身份认证之外,客户还希望集成RSA等类似的双因素身份验证解决方案.实现Citrix与RSA结合的认证模式主要有三种: 1) 仅使用RSA认证登陆,就可以访问应用程序,类似智能卡认证模式: 2) 在认证登陆界面上,同时输入User Name.Password.PassCode的认证模式: 3)实现分步登陆模式,首先由RSA的Web界面使用RSA的PassCode登陆,然后由Citrix的Web界面使用User Name.Password登陆.或者是先通

如何使用openssl生成RSA公钥和私钥对

公私玥可使用OPENSSL工具生成. 在Windows环境下,可自行下载OPENSSL工具( http://www.openssl.org/related/binaries.html). 在Linux环境下,可安装OPENSSL工具包(以ubuntu为例,执行sudo apt-get install openssl). 在Windows环境下,打开OPENSSL安装目录bin文件下面的openssl.exe.在Linux环境下,直接在终端中运行openssl. 1)生成RSA私钥: genrsa

Crypto++入门学习笔记(DES、AES、RSA、SHA-256)

最先附上 下载地址 背景(只是个人感想,技术上不对后面的内容构成知识性障碍,可以skip): 最近,基于某些原因和需要,笔者需要去了解一下Crypto++库,然后对一些数据进行一些加密解密的操作. 笔者之前没接触过任何加密解密方面的知识(当然,把每个字符的ASCII值加1之流对明文进行加密的“趣事”还是干过的,当时还很乐在其中.),甚至一开始连Crypto++的名字都没有听过,被BS了之后,就开始了Crypto++的入门探索过程. 最初,大概知道了要了解两大类算法中的几个算法——对称加密算法:D

Day 1 @ RSA Conference Asia Pacific &amp; Japan 2016

# 国内出发 早上8:45的航班,首次从深圳机场乘坐国际航班(先前去日本.欧洲都从香港走),就提前了3个小时出发. 乘taxi到机场30分钟不到,135元.到了T3 4号出发口,发现check-in的柜台工作人员还未上班…… check-in之后,直接准备过关登机.走到负一电梯口,发现不太对劲,底下黑乎乎的,不像有人上班. 下去之后,一位海关工作人员看到我们,提示直接往前走,路上包括安检机器.过关通道全未启动……等走到前方,突然灯光亮起,海关表示“这么早来干嘛,里面没吃没喝没购物,你们7点半再来

使用OpenSSL为支付宝生成RSA私钥

通过openssl工具生成RSA的公钥和私钥(opnssl工具可在互联网中下载到,也可以点此下载无线接口包,里面包含此工具)打开openssl文件夹下的bin文件夹,执行openssl.exe文件: 1)生成RSA私钥 输入“生成命令.txt”文件中:“genrsa -out rsa_private_key.pem 1024”,并回车得到生成成功的结果,如下图: 此时,我们可以在bin文件夹中看到一个文件名为rsa_private_key.pem的文件,用记事本方式打开它,可以看到-----BE

c#与JavaScript实现对用户名、密码进行RSA非对称加密

原文:c#与JavaScript实现对用户名.密码进行RSA非对称加密 博主最近手上这个项目呢(就是有上百个万恶的复杂excel需要解析的那个项目,参见博客:http://www.cnblogs.com/csqb-511612371/p/4885930.html),由于是一个内网项目,安全性要求很低,不需要做什么报文加密. 但是总觉得用户名密码都是明文传输,略微有点坑甲方... 想了想,那就做个RSA加密,把用户名.密码做密文传输吧...至于为什么是RSA,因为也想趁机学习一下,DES.MD5什

密码学---RSA密码的C++实现

1 //RSA密码 2 /*理解算法最重要,最好自己动手实现试试看,可以使用MFC写一个简单的交互界面*/ 3 4 #include <iostream> 5 #include <cstdlib> 6 #include <ctime> 7 #include <cstring> 8 using namespace std; 9 //RSA算法所需参数 10 typedef struct RSA_PARAM_Tag 11 { 12 unsigned __int6

前后端(支持app)RSA加密通信证书生成方法汇编

最近一个项目,处于安全上的考虑,前后端需要使用安全证书加密通信,涉及ios/android-后台交互.在测试环境上没有正式的CA证书,使用自签证书开发. 下面把生成4套环境的自签证书过程mark下,如有需要,可参考: 以下命令的执行环境均为windows-cmd界面(前提需安装jdk,使用jdk自带的keytool工具) 1.生成jks.csr证书(这俩证书暂时没用): keytool -genkey -alias *.test.com -sigalg SHA1withRSA -keyalg R

【转】基于RSA算法实现软件注册码原理初讨

1 前言 目前,商用软件和共享软件绝大部份都是采用注册码授权的方式来保证软件本身不被盗用,以保证自身的利益.尽管很多常用的许多软件系统的某些版本已经被别人破解,但对于软件特殊行业而言,注册码授权的方式还是一种保护软件系统本身的一种有效的手段. 通常而言,注册码授权方式有以下几种方式: u  安装序列号方式:这是最为常用的方式,Mircosoft提供的产品(例如:Windows系列产品.Office系列产品等等)都是采用这种方式.通过一种复杂的算法生成安装序列号,在安装过程中,安装程序对用户输入的