以下是源码,亲测可用。
目前只能实现英文部分的加密和解密。

#include “mainwindow.h”
#include “ui_mainwindow.h”
#include
#include<math.h>
#include<windows.h>
#include<stdio.h>
#include

typedef long long ll;
int e, d, n;

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
nums(100)
{
ui->setupUi(this);
}

int MainWindow::gcd(int a, int b) //求最大公约数
{
int c = 0;
if(a<b) qSwap(a,b);
c = b;
do
{
b = c;
c = a%b;
a = b;
}
while (c != 0);
return b;
}

int MainWindow::PrimarityTest(int a, int i) //判断i是否是素数
{
int flag=0;
for(a;a<i;a++)
{
if(i%a==0)
{
flag=1;
break;
}
}
if(flag) return 0;
return 1;
}

int MainWindow::ModularExponention(int a, int b, int n) //求a^bmodn
{
int y;

/*使用二进制平方乘法计算 pow(a,b) % n*/
y=1;while(b != 0)
{/*对于b中的每个1,累加y*/if(b & 1)y = (y*a) % n;/*对于b中的每一位,计算a的平方*/a = (a*a) % n;/*准备b中的下一位*/b = b>>1;
}
return y;
// complete this part

}

void MainWindow::extgcd(int a,int b,int& d,int& x,int& y) //获取(1/a)modb得结果
{
if(!b)
{
d=a;
x=1;
y=0;
}
else
{
extgcd(b,a%b,d,y,x);
y-=x*(a/b);
}
}

int MainWindow::ModularInverse(int a,int b) //获取(1/a)modb得结果
{
int d,x,y;
extgcd(a,b,d,x,y);
return d==1?(x+b)%b:-1;
}

void MainWindow::KeyGeneration() //获取公钥密钥
{
int p, q;
int phi_n;

do
{dop = rand();while (p % 2 == 0);}
while (!PrimarityTest(2, p));do
{doq = rand();while (q % 2 == 0);
}
while (!PrimarityTest(2, q));n = p * q;
phi_n = (p - 1) * (q - 1);doe = rand() % (phi_n - 2) + 2; // 1 < e < phi_n
while (gcd(e, phi_n) != 1);d = ModularInverse(e,phi_n);

}

int MainWindow::Encryption(int value) //加密
{
int cipher;
cipher = ModularExponention(value, e, n);
return cipher;
}

int MainWindow::Decryption(int value) //解密
{
int decipher;
decipher = ModularExponention(value, d, n);
return decipher;
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_Addin_clicked() //对英文加密和解密
{
QFile file(“C:\Users\Administrator\Desktop\test.txt”);
if(!file.open(QIODevice::ReadWrite)) //以写的方式打开文件,如果文件不存在则创建,
qDebug()<<file.errorString();

KeyGeneration();  //获取公钥密钥QString temp="C:\\Users\\Administrator\\Desktop\\ShowTest.txt";
QFile m_file(temp);
if(!m_file.open(QIODevice::ReadWrite))//以写的方式打开文件,如果文件不存在则创建,qDebug()<<m_file.errorString();QString ss=file.readAll();
QStringList m_lists=ss.split("\n");
int pos=m_lists.size();
//qDebug()<<"the lenghts is"<<pos<<" "<<ss;int p=0;
while(pos>1)
{// QByteArray buf=file.readLine();// qDebug()<<"the array is"<<buf;QString m_temp=m_lists.at(p);//qDebug()<<"the content is"<<m_temp;if(m_temp.size()>0){for(int i=0;i<m_temp.size();i++){char s=m_temp.at(i).toAscii();//  qDebug()<<"the every data is"<<s;int value = toascii(s);  //toascii将字符转化成对应ascall值int m=Encryption(value);  //加密输出QString mm=QString("%1").arg(m);ui->Show->append(mm);}}else{}pos--;p++;
}p=0;
QByteArray m_bytes;
nums=1;
while (nums>0)
{QString s=ui->Show->toPlainText();QString  temps;QStringList m_list = s.split("\n");for(int i=0;i<m_list.size();i++){// qDebug()<<"the temp value is"<<m_list.at(i);temps=m_list.at(i);m_bytes.append(Decryption(temps.toInt()));  //解密}nums--;
}
QString m_ss=m_bytes;
ui->Show->setText(m_ss);

}

void MainWindow::on_Encryption_clicked()
{

}

void MainWindow::on_Decrypt_clicked()
{

}

void MainWindow::SetEncryption()
{

}

void MainWindow::Decrypt()
{

}

使用以上的算法对源码进行加密和解密,解密之后显示在qt的文本框上。现实的效果如下:

源码可以查看本博主的资源。

使用RAS进行英文的加密和解密相关推荐

  1. 5.3使用凯撒密码加密和解密英文文件python

    1本关任务:使用凯撒密码加密和解密英文文件.具体要求如下: (1)接收一个字符串为参数,如果参数值为加密,要求用户输入一个要加密的文件名,再输入一个单词做为密钥发生器,用于计算偏移量,对文件中的内容进 ...

  2. 安全编程之RAS加密与解密

    RAS是什么: RSA:是一种公钥密码体制,公钥公开,私钥保密,它的加密解密算法是公开的. 由公钥加密的内容可以并且只能由私钥进行解密,并且由私钥加密的内容可以并且只能由公钥进行解密. 也就是说,RS ...

  3. C# RAS 加密与解密讲解

    RSA加密算法 在谈RSA加密算法之前,我们需要先了解下两个专业名词,对称加密和非对称加密. 对称加密即:含有一个称为密钥的东西,在消息发送前使用密钥对消息进行加密,在对方收到消息之后,使用相同的密钥 ...

  4. 安全系列之——手写JAVA加密、解密

    其他文章: 安全系列之--手写JAVA加密.解密 安全系列之--数据传输的完整性.私密性.源认证.不可否认性 安全系列之--主流Hash散列算法介绍和使用 安全系列之--RSA的公钥私钥有多少人能分的 ...

  5. Java加密与解密笔记(三) 非对称加密

    非对称的特点是加密和解密时使用的是不同的钥匙.密钥分为公钥和私钥,用公钥加密的数据只能用私钥进行解密,反之亦然. 另外,密钥还可以用于数字签名.数字签名跟上文说的消息摘要是一个道理,通过一定方法对数据 ...

  6. 【知识积累】DES算法之C#加密Java解密

    一.前言 在项目需要添加安全模块,客户端调用服务端发布的service必须要经过验证,加密算法采用DES,客户端采用C#进行加密,服务端使用Java进行解密.废话不多说,直接上代码. 二.客户端 客户 ...

  7. python输出字体的大小_Python密码学编程:文件的加密与解密

    在之前的章节中,编写的程序只能操作较少的信息,这些信息往往是以字符串的形式直接写在代码中的.但本章中的程序可以对整个文件进行加密和解密,文件的大小可以包括成千上万个字符. 本章要点 open()方法. ...

  8. HTML、JS、字符串的简单加密与解密

    1.最简单的加密与解密 用escape与unescape进行编码与解码字符串,例如"你好"加密后变为"%u4F60%u597D",看不懂吧,如果是加密js的话, ...

  9. php descryptoserviceprovider,[WPF]C#和php实现DES加密和解密

    加密解密的时候如果只传一个key值那么向量值默认跟key值一样 c#中实现加密和解密的类 Des.csusing System; using System.IO; using System.Secur ...

最新文章

  1. JVM堆 栈 方法区详解
  2. 1 redux初探、用react开发数值增值案例
  3. 打印pdf就一页_Excel表格打印技巧汇总,看完才发现,你连基础打印技巧都不知道...
  4. Linux学习系列之Linux入门(一)linux安装与入门
  5. 矩形嵌套(NYOJ-16)
  6. no such file or directory什么意思_为什么这次 MySQL 崩溃恢复要这么久-爱可生
  7. 为什么使用linux内核,为什么Linux内核使用它所做的数据结构?
  8. 巡风代码架构简介以及Flask的项目文件结构简介
  9. python constructor_Python学习札记(2)——搭建Boa-constructor
  10. 标准时间标准Time Zone: GMT,UTC,DST,CST
  11. 1.使用WPE工具分析游戏网络封包
  12. apicloud 请删除手机中的apploader后在尝试
  13. Mac命令行上传代码至GitHub
  14. ICO走进华盛顿:国会探讨加密货币,有什么可以期待?
  15. 使用redis的setnx可以非同一线程进行加锁和解锁(附源码)
  16. 417,BFS和DFS两种方式求岛屿的最大面积
  17. 20154312 曾林 EXP9 Web安全基础
  18. 音频重采样ffmpeg(九)
  19. 国际顶会 SIGCOMM,我们来了!
  20. 24C02写完不能立马读!

热门文章

  1. linux下磁盘分区和逻辑卷管理
  2. 卸载ubuntu20.04自带软件
  3. facenet源码使用记录
  4. 企业会议直播如何做?——设备篇
  5. 佳博android sdk,小白封装佳博gprintersdkv2.2,漫漫长路(一)
  6. JavaScript/jQuery、HTML、CSS 构建 Web IM 远程及时聊天通信程序
  7. atan2相关知识汇总
  8. 【Spring】配置文件
  9. Android 7.0 挂断电话流程分析
  10. Android技术知识点:如何通过 Android Studio 和 Google Play 服务使用可下载字体