qt加密解密
⑴ qt怎么加添第三方库(crypto++)
出错信息后面应该还有内容吧,比如提示你缺少什么信息,一般这个错是因为makefile文件信息不匹配,比如makefile里提到了某些文件,实际上不存在或者路径变化等
⑵ qt如何对字符串进行md5加密,保存到文件,然后能读取到解密到文件
#include<QCryptographicHash>
#include<QSettings>
#include<QDebug>
//generateMD5-Hash
QStringtest_string("ateststringforMD5hash");
QByteArraymd5_hash;
md5_hash=QCryptographicHash::hash(test_string.toUtf8(),QCryptographicHash::Md5);
QStringmd5hash_string=md5_hash.toHex();
qDebug()<<"MD5-Hash:"<<md5hash_string;
//writetomd5_hash.ini
QSettingsmd5writeFile(QString("md5_hash.ini"),QSettings::IniFormat);
md5writeFile.setValue(QLatin1String("MD5-Hash"),md5_hash);
md5writeFile.sync();
//readfrommd5_hash.ini
QSettingsmd5readFile(QString("md5_hash.ini"),QSettings::IniFormat);
md5readFile.sync();
if(true==md5readFile.contains("MD5-Hash")){
QByteArraymd5_array=md5readFile.value("MD5-Hash").toByteArray();
qDebug()<<"MD5-Hashreadfromfile:"<<md5_array.toHex();
}
以上代码纯手敲并且Qt上验证通过的,请珍惜使用。
⑶ 如何使用Qt加密解密类库 QCA
类库与插件:crypto拷贝到:Qt安装目录\Desktop\Qt\4.7.4\mingw\plugins\crypto Qt feautre:feature拷贝到:Qt安装目录\Desktop\Qt\4.7.4\mingw\mkspecs\features 使用类库时,需要: 1. 在你的Qt项目文件pro中添加"CONFIG += crypto" 2.
⑷ 谁可以给我一个c语言写的DES代码,要求(输入任意一个字符串,可以得到相应的密文)
首先新建头文件des_encode.H
内容如下:
void EncodeMain(); //EncodeMain function
void DecodeMain(); //Sorry ,it has not used
void Decode(int *str,int *keychar); //decode :input 8 chars,8 keychars
void Encode(int *str,int *keychar); //encode: input 8 chars,8 keychars
void keyBuild(int *keychar); //create key array
void StrtoBin(int *midkey,int *keychar); //change into binary
void keyCreate(int *midkey2,int movebit,int i); //call by keyBuild
void EncodeData(int *lData,int *rData,int *srt); //encodedata function
void F(int *rData,int *key); //F function
void Expand(int *rData,int *rDataP); //Expand function
void ExchangeS(int *rDataP,int *rData); //S-diagram change
void ExchangeP(int *rData); //P change
void FillBin(int *rData,int n,int s); // data to binary;call by S-Diagram change function
void DecodeData(int *str,int *lData,int *rData); //DecodeData from binary
int IP1[]={58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, //initial change
62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7,
};
int IP2[]={40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, //opp initial change
38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29,
36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27,
34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25
};
int s[][4][16]={{ //S-diagram array
{14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7},
{0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8},
{4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0},
{15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13}
},
{
{15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10},
{3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5},
{0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15},
{13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9}
},
{
{10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8},
{13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1},
{13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7},
{1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12}
},
{
{7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15},
{13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9},
{10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4},
{3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14}
},
{
{2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9},
{14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6},
{4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14},
{11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3}
},
{
{12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11},
{10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8},
{9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6},
{4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13}
},
{
{4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1},
{13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6},
{1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2},
{6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12}
},
{
{13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7},
{1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2},
{7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8},
{2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11}
}
};
int Ex[48]={ 32,1,2,3,4,5, //Expand array
4,5,6,7,8,9,
8,9,10,11,12,13,
12,13,14,15,16,17,
16,17,18,19,20,21,
20,21,22,23,24,25,
24,25,26,27,28,29,
28,29,30,31,32,1
};
int P[32]={16,7,20,21, //P-change
29,12,28,17,
1,15,23,26,
5,18,31,10,
2,8,24,14,
32,27,3,9,
19,13,30,6,
22,11,4,25
};
int PC1[56]={57,49,41,33,25,17,9, //PC-1 in keyBuild
1,58,50,42,34,26,18,
10,2,59,51,43,35,27,
19,11,3,60,52,44,36,
63,55,47,39,31,33,15,
7,62,54,46,38,30,22,
14,6,61,53,45,37,29,
21,13,5,28,20,12,4
};
int PC2[48]={14,17,11,24,1,5, //PC-2 in keyBuild
3,28,15,6,21,10,
23,19,12,4,26,8,
16,7,27,20,13,2,
41,52,31,37,47,55,
30,40,51,45,33,48,
44,49,39,56,34,53,
46,42,50,36,29,32
};
再创建des.cpp
内容如下:
#include<stdio.h>
#include<string.h>
#include"des_encode.h"
int key[16][48];
char str[8];
void main() //main function
{
EncodeMain();
}
void EncodeMain() //EncodeMain function
{
int i;
char keychar[8];
int key2[8];
int strkey[8];
printf("请输入8个要加密的字符:\n");
for(i=0;i<8;i++)
scanf("%c",&str[i]);
getchar();
for(i=0;i<8;i++)
strkey[i]=str[i];
printf("\n输入明文的十六进制为:\n");
for(i=0;i<8;i++)
printf("%10x",strkey[i]);
printf("\n请输入密钥(8个字符):\n");
for(i=0;i<8;i++)
scanf("%c",&keychar[i]);
for(i=0;i<8;i++)
key2[i]=keychar[i];
getchar();
// printf("%c",keychar[i]);
Encode(strkey,key2);
printf("\n加密后十六进制密文是:\n");
for(i=0;i<8;i++)
printf("%10x",strkey[i]);
printf("\n\n清输入解密密码\n");
for(i=0;i<8;i++)
scanf("%c",&keychar[i]);
for(i=0;i<8;i++)
key2[i]=keychar[i];
Decode(strkey,key2);
for(i=0;i<8;i++)
printf("%10x",strkey[i]);
for(i=0;i<8;i++)
str[i]=strkey[i];
printf("\n明文为:\t");
for(i=0;i<8;i++)
printf("%c",str[i]);
printf("\n\n");
}
void keyBuild(int *keychar){ //create key array
int i,j;
int movebit[]={1,1,2,2,2,2,2,2,
1,2,2,2,2,2,2,1};
int midkey2[56];
int midkey[64];
StrtoBin(midkey,keychar);
for(i=0;i<56;i++)
midkey2[i]=midkey[PC1[i]-1];
for(i=0;i<16;i++)
keyCreate(midkey2,movebit[i],i);
}
void StrtoBin(int *midkey,int *keychar){ //change into binary
int trans[8],i,j,k,n;
n=0;
for(i=0;i<8;i++){
j=0;
while(keychar[i]!=0){
trans[j]=keychar[i]%2;
keychar[i]=keychar[i]/2;
j++;
}
for(k=j;k<8;k++)trans[k]=0;
for(k=0;k<8;k++)
midkey[n++]=trans[7-k];
}
}
void keyCreate(int *midkey2,int movebit,int n){
int i,temp[4];
temp[0]=midkey2[0];
temp[1]=midkey2[1];
temp[2]=midkey2[28];
temp[3]=midkey2[29];
if(movebit==2){
for(i=0;i<26;i++){
midkey2[i]=midkey2[i+2];
midkey2[i+28]=midkey2[i+30];
}
midkey2[26]=temp[0];midkey2[27]=temp[1];
midkey2[54]=temp[2];midkey2[55]=temp[3]; }
else
{ for(i=0;i<27;i++){
midkey2[i]=midkey2[i+1];
midkey2[i+28]=midkey2[i+29];
}
midkey2[27]=temp[0];midkey2[55]=temp[2];
}
for(i=0;i<48;i++)
key[n][i]=midkey2[PC2[i]-1];
}
void EncodeData(int *lData,int *rData,int *str){ //encodedata function
int i,j,temp[8],lint,rint;//int h;
int data[64];
lint=0,rint=0;
for(i=0;i<4;i++){
j=0;
while(str[i]!=0){
temp[j]=str[i]%2;
str[i]=str[i]/2;
j++;
}
while(j<8)temp[j++]=0;
for(j=0;j<8;j++)
lData[lint++]=temp[7-j];
j=0;
while(str[i+4]!=0){
temp[j]=str[i+4]%2;
str[i+4]=str[i+4]/2;
j++;
}
while(j<8)temp[j++]=0;
for(j=0;j<8;j++)rData[rint++]=temp[7-j];
}
for(i=0;i<32;i++){
data[i]=lData[i];
data[i+32]=rData[i];
}
for(i=0;i<32;i++){
lData[i]=data[IP1[i]-1];//printf("P1:%5d:%5d,%5d\n",IP1[i],lData[i],data[IP1[i]-1]);
rData[i]=data[IP1[i+32]-1];
}
}
void F(int *rData,int *key){ //F function
int i,rDataP[48];
Expand(rData,rDataP);
for(i=0;i<48;i++){
rDataP[i]=rDataP[i]^key[i];// printf("%10d",rDataP[i]);if((i+1)%6==0)printf("\n");
}
ExchangeS(rDataP,rData);
ExchangeP(rData);
}
void Expand(int *rData,int *rDataP){ //Expand function
int i;
for(i=0;i<48;i++)
rDataP[i]=rData[Ex[i]-1];
}
void ExchangeS(int *rDataP,int *rData){ //S-diagram change
int i,n,linex,liney;
linex=liney=0;
for(i=0;i<48;i+=6){
n=i/6; //printf("%10d\n",(rDataP[i]<<1));
linex=(rDataP[i]<<1)+rDataP[i+5];
liney=(rDataP[i+1]<<3)+(rDataP[i+2]<<2)+(rDataP[i+3]<<1)+rDataP[i+4];
FillBin(rData,n,s[n][linex][liney]);
}
}
void ExchangeP(int *rData){ //P change
int i,temp[32];
for(i=0;i<32;i++)
temp[i]=rData[i];
for(i=0;i<32;i++)
rData[i]=temp[P[i]-1];
}
void FillBin(int *rData,int n,int s){ // data to binary;call by S-Diagram change function
int temp[4],i;
for(i=0;i<4;i++){
temp[i]=s%2;
s=s/2;
}
for(i=0;i<4;i++)
rData[n*4+i]=temp[3-i];
}
void DecodeData(int *str,int *lData,int *rData){ //DecodeData from binary
int i;int a,b;int data[64];
a=0,b=0;
for(i=0;i<32;i++){
data[i]=lData[i];
data[i+32]=rData[i];
}
for(i=0;i<32;i++){
lData[i]=data[IP2[i]-1];
rData[i]=data[IP2[i+32]-1];
}
for(i=0;i<32;i++){
a=(lData[i]&0x1)+(a<<1);
b=(rData[i]&0x1)+(b<<1);
if((i+1)%8==0){
str[i/8]=a;a=0;//printf("%d",i/8);
str[i/8+4]=b;b=0;//printf("%d",i/8+4);
}
}
}
void Encode(int *str,int *keychar){ //encode: input 8 chars,8 keychars
int lData[32],rData[32],temp[32],rDataP[48];
int i,j;
keyBuild(keychar);
EncodeData(lData,rData,str);
for(i=0;i<16;i++){
for(j=0;j<32;j++)
temp[j]=rData[j];
F(rData,key[i]);
for(j=0;j<32;j++){
rData[j]=rData[j]^lData[j];
}
for(j=0;j<32;j++)
lData[j]=temp[j];
}
DecodeData(str,rData,lData);
}
void Decode(int *str,int *keychar){ //decode :input 8 chars,8 keychars
int lData[32],rData[32],temp[32],rDataP[48];
int i,j;
keyBuild(keychar);
EncodeData(lData,rData,str); //这个位置
for(i=0;i<16;i++){
for(j=0;j<32;j++)
temp[j]=rData[j];
F(rData,key[15-i]);
for(j=0;j<32;j++){
rData[j]=rData[j]^lData[j];
}
for(j=0;j<32;j++){
lData[j]=temp[j];
}
}
DecodeData(str,rData,lData);
}
OK了
如果还有问题
给我发站内信
⑸ 比特币基础教学之:怎样保护你的私钥
私钥安全问题的重要性对比特币玩家来说不言而喻。对于比特币的重量级玩家或者比特币商家而言,如何保护好私钥更是需要仔细考虑和反复斟酌的。今天编者就和大家探讨一下如何保护比特币私钥的问题。对于bitcoin-qt客户端来说,比特币私钥一般储存在客户端的wallet.dat文件中。对于Blockchain这样的在线钱包用户来说,比特币私钥是储存在在线钱包的网络服务器上,用户也可以将私钥下载到本地。对于纸钱包的用户来说,私钥可以被打印出来。但是,怎样保护私钥的安全性呢?编者列出了几种方法供大家参考。
用对称加密的方法保管私钥 对称加密(Symmetric-key algorithm)是指加密和解密都用一个密钥。我们平时用到的加密方法一般都是对称加密,比如 winrar 中的加密,bitcoin-qt中对私钥文件的加密也是用的对称型加密算法。常用的对称加密算法有:AES、DES、RC4、RC5等等。对称加密需要用户设置相对比较复杂的密钥,以防止被暴力破解。Go to top方法一,用bitcoin-qt对私钥钱包进行加密。我们在命令模式下可以用encryptwallet命令来对钱包进行加密。命令模式的使用方法可以参见比特币基础教学之:怎样使用纸钱包私钥。这是私钥加密的最简易有效的方法。但是在使用walletpassphrase命令进行解密钱包时,密钥会被读入计算机内存中,所以存在攻击者获取密钥的可能性。加密命令: encryptwallet YOURPASSWORD解密钱包命令: walletpassphrase YOURPASSWORDTIMEOUT更改密码命令: walletpassphrasechange OLDPASSWORDNEWPASSWORDGo to top方法二,使用blockchain提供的AES加密。Blockchain为用户提供基于AES算法的私钥文件加密服务。用户可以将加密好的文件下载下来,并妥善保存。
Go to top方法三,用第三方软件Truecrypt对密钥文件加密,这也是编者比较推荐的方法。Truecrypt开源免费,软件成熟度很高,而且支持双因素认证和整个硬盘加密。另外,FBI人员在Truecrypt上面吃过亏,因此口碑很不错。Truecrypt的口碑FBI hackers fail to crack TrueCrypt The FBI has admitted defeat in attempts to break the open source encryption used to secure hard drives seized by Brazilian police ring a 2008 investigation.
The Bureau had been called in by the Brazilian authorities after the country’s own National Institute of Criminology (INC) had been unable to crack the passphrases used to secure the drives by suspect banker, Daniel Dantas.Brazilian reports state that two programs were used to encrypt the drives, one of which was the popular and widely-used free open source program TrueCrypt. Experts in both countries apparently spent months trying to discover the passphrases using a dictionary attack, a technique that involves trying out large numbers of possible character combinations until the correct sequence is found.
完整文章点击这里Truecrypt只支持对称加密算法。使用它的用户必须要将密钥牢记,如果你忘记密钥,那么没有人能够恢复你加密的文件。
Truecrypt官方网站Truecrypt使用文档 用非对称加密的方法保管私钥 非对称加密方法所采用公钥和私钥的形式来对文件进行加密。用户可以用公钥来对文件进行加密,用私钥对文件解密。常见的非对称加密算法有RSA、Elgamal、ECC等等。非对称加密的好处是密钥的复杂度一般很高,可以很有效的防止被暴力破解。缺点是有一定的使用门槛,不太适合普通级用户。Go to top 方法一、个人用户可以考虑使用RSA来进行加密。首先,可以创建公钥和私钥,点击这里生成密钥。将公钥私钥妥善保管后,便可以用公钥加密和私钥解密了,点击这里进行加密和解密。RSA公钥和私钥的产生过程RSA公钥和私钥的产生过程随意选择两个大的素数p和q,p不等于q,计算N=pq。根据欧拉函数,求得r= φ(N) = φ(p)φ(q) = (p-1)(q-1)选择一个小于r的整数e,求得e关于模r的模反元素,命名为d。(模反元素存在,当且仅当e与r互质)将p和q的记录销毁。(N,e)是公钥,(N,d)是私钥。Go to top方法二、比较成熟的非对称加密软件有我们可以采用PGP(Pretty Good Privacy)工具来对文件进行加密。PGP加密可以让每个公钥邦定到一个用户的所有信息。相比RSA来讲,PGP的功能更加完善可靠。但是随着PGP的升级,新的加密消息有可能不被旧的PGP系统解密,所以用户在使用PGP之前应该首先熟悉PGP的设置。PGP加密工具网上有很多,编者就不列举了。
wiki中关于PGP的介绍PGP在线加解密系统PGP命令FAQ 高级方法保管私钥 上述保管私钥的方式都很常见,有经验的攻击者依然可能得到用户的私钥文件。关于更加高级隐秘的私钥保管方式,参见以后的比特币高级教学内容。
⑹ 这种网页源代码是用的什么加密方式如何加密、解密
到左道先一个人网站自助平台问一下,就知道了。么这笨。。。
终极的一个网页代码加密方法,屡次悬尝摆擂成功过关,永久无解
左道先一爱好,直入正题。
首先,为什么无解——密码存在你的数据库里,用时实时用PHP取用,按
时间无序数字生成密码并用时间算法再加密,就是制作者也需要折腾一翻
,为的是(那个特别的用用,呵呵)。。。
方法上,
第一步,
。。。
(小省了一点,二百字符左右)
第二步,
AJAX - 向服务器发送请求获取密码,进步页面验证。
网页使用密码,验证显示,形成终极页。
更绝的,想要,只显示结果,要求(假设有的,对于较高高手的)有人会
用“”直显网页源码。
吓,乱讲。
左道先一,接招:
中转链接,执行PHP转换,原文转换成图片,临时图片。
This OK!
最后,没有更多,欢迎合作,网络共赢。
你懂得?!
(代码因固不上,有想让你去我网站米系米系的味道——自己去取一下也
好;也有,网络上传代码现在不敢极了!9X%的保不通过,汉汗寒。。。
)
牛刀,也许在你眼中不是,欢迎挑战。
共享学习,左道站长自助推广平台。
⑺ Qt如何对sqlite数据库进行加密
给SQLite数据库加密解密的方法:
1、创建空的sqlite数据库。
//数据库名的后缀你可以直接指定,甚至没有后缀都可以
//方法一:创建一个空sqlite数据库,用IO的方式
FileStream fs = File.Create(“c:\\test.db“);
//方法二:用SQLiteConnection
SQLiteConnection.CreateFile(“c:\\test.db“);
创建的数据库是个0字节的文件。
2、创建加密的空sqlite数据库
//创建一个密码为password的空的sqlite数据库
SQLiteConnection.CreateFile(“c:\\test2.db“);
SQLiteConnection cnn = new SQLiteConnection(“Data Source=c:\\test2.db“);
SQLiteConnection cnn = new SQLiteConnection(“Data Source=D:\\test2.db“);
cnn.Open();
cnn.ChangePassword(“password“);
3、给未加密的数据库加密
SQLiteConnection cnn = new SQLiteConnection(“Data Source=c:\\test.db“);
cnn.Open();
cnn.ChangePassword(“password“);
4、打开加密sqlite数据库
//方法一
SQLiteConnection cnn = new SQLiteConnection(“Data Source=c:\\test2.db“);
cnn.SetPassword(“password“);
cnn.Open();
//方法二
SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder();
builder.DataSource = @”c:\test.db“;
builder.Password = @”password“;
SQLiteConnection cnn = new SQLiteConnection(builder.ConnectionString);
cnn .Open();
除了用上述方法给SQLite数据库加密以外,您还可以使用专业的文件加密软件将SQLite数据库加密。
超级加密 3000采用先进的加密算法,使你的文件和文件夹加密后,真正的达到超高的加密强度,让你的加密数据无懈可击。
超级加密3000使用起来,只要点击需要加密的文件的右键,即可轻松实现文件的加密。
解密只要双击已加密文件,输入密码即可轻松搞定。
⑻ 文件加密解密问题
是不是-高强度文件夹加密大师 8000 ,如果是在安装一个同样的,就能找到,在不行重做系统可以吧