㈠ C对一个四位数字加密再解密
#include<stdio.h>
void code(char *p)
{
for(int i=0;i<4;i++)
{
p[i]=(p[i]-41)%10+48;
}
}
void uncode(char *p)
{
for(int i=0;i<4;i++)
{
p[i]=(p[i]-45)%10+48;
}
}
main()
{
char num[4];
printf("请输入一个4位数:\n");
scanf("%s",num);
code(num);
printf("密文为%s\n",num);
uncode(num);
printf("原数为%s\n",num);
}
㈡ 编写一个简单的加密程序:输入四位整数,按照以下加密算法处理后,生成加密后的四位整数输出。 加密算法:
//原理: a异或b异或b 等于 a
//b就是密码
# include <windows.h>
int __stdcall wWinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPWSTR lpCmdLine, __in int nShowCmd )
{
int numInput[4] = {1, 2, 3, 4}; //输入数据
int key[4] = {6, 2, 9, 8}; //密码
int enp[4], disenp[4]; //加密与解密后的数据
for(int i = 0; i < 4; ++i)
{
enp[i] = numInput[i] ^ key[i];
disenp[i] = enp[i] ^ key[i];
}
wchar_t strDsp[56];
wsprintf(strDsp, L"原数据%d:%d:%d:%d", numInput[0], numInput[1], numInput[2], numInput[3]);
::MessageBox(::GetForegroundWindow(), strDsp, strDsp, 0);
wsprintf(strDsp, L"加密后%d:%d:%d:%d", enp[0], enp[1], enp[2], enp[3]);
::MessageBox(::GetForegroundWindow(), strDsp, strDsp, 0);
wsprintf(strDsp, L"解密后%d:%d:%d:%d", disenp[0], disenp[1], disenp[2], disenp[3]);
::MessageBox(::GetForegroundWindow(), strDsp, strDsp, 0);
return 0;
}
㈢ C语言编程 将四位数字分为一组进行加密,其中第一位和第三数字交换,第二位和第四位数字交换
1 3 交换 2 4交换就是 12和34交换 前两位换到后两位
#include "stdio.h"
void main()
{
int a;
int b;
scanf("%d",&a);
b=a/100+a%100*100;
printf("%d",b);
}
㈣ 要求从键盘输入一个4位整数,按如下规则加密后输出。加密规则:每位数字都加上7,然后用和除以10的余数取
需要两个子程序
function zhu()
x=input('请输入一个四位数(1000-9999):');
if x>9999
'不是四位数,程序结束'
elseif x<1000
'不是四位数,程序结束'
else f1=x
y=f(f1);
end
function y=f(f1)
a=fix(f1/1000);
b=fix((f1-a*1000)/100);
c=fix((f1-a*1000-b*100)/10);
d=mod(f1,10);
c=mod(a+7,10);
d=mod(b+7,10);
a=mod(c+7,10);
b=mod(d+7,10);
y=1000*a+100*b+10*c+d
㈤ 输入一个四位数,将其加密后输出。方法是将该数每一位的数字加9,然后除以10取余作为该位上的新数字,
/*
1234
2103
Press any key to continue
*/
#include<iostream.h>
intmain(){
intdigit1,digit2,digit3,digit4,newnum,number;
cin>>number;
digit1=(number%10+9)%10;number/=10;
digit4=(number%10+9)%10;number/=10;
digit3=(number%10+9)%10;number/=10;
digit2=(number+9)%10;
newnum=digit4*1000+digit3*100+digit2*10+digit1;
cout<<newnum<<endl;
return0;
}
㈥ 4位密码最常用前20名
用户密码保存到数据库时,常见的加密方式有哪些?以下几种方式是常见的密码保存方式:
1、明文保存
比如用户设置的密码是“123456”,直接将“123456”保存在数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。
2、对称加密算法来保存
比如3DES、AES等算法,使用这种方式加密是可以通过解密来还原出原始密码的,当然前提条件是需要获取到密钥。不过既然大量的用户信息已经泄露了,密钥很可能也会泄露,当然可以将一般数据和密钥分开存储、分开管理,但要完全保护好密钥也是一件非常复杂的事情,所以这种方式并不是很好的方式。
3、MD5、sha1等单向HASH算法
使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单,因此很多互联网公司都采用这种方式保存用户密码,曾经这种方式也是比较安全的方式,但随着彩虹表技术的兴起,可以建立彩虹表进行查表破解,目前这种方式已经很不安全了。
其实之前公司也是采用的这种MD5加密方式。
4、PBKDF2算法
该算法原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和破解的难度都大幅增加。
在使用PBKDF2算法时,HASH一般会选用sha1或者sha256,随机盐的长度一般不能少于8字节,HASH次数至少也要1000次,这样安全性才足够高。一次密码验证过程进行1000次HASH运算,对服务器来说可能只需要1ms,但对于破解者来说计算成本增加了1000倍,而至少8字节随机盐,更是把建表难度提升了N个数量级,使得大批量的破解密码几乎不可行,该算法也是美国国家标准与技术研究院推荐使用的算法。
5、bcrypt、scrypt等算法
这两种算法也可以有效抵御彩虹表,使用这两种算法时也需要指定相应的参数,使破解难度增加。
在密码学中,scrypt(念作“ess crypt”)是Colin Percival于2009年所发明的金钥推衍函数,当初设计用在他所创立的Tarsnap服务上。设计时考虑到大规模的客制硬件攻击而刻意设计需要大量内存运算。
Scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利 用rainbow table进行暴力攻击更加困难。
㈦ C语言数字加密
/*
输入1个四位数,将其加密后输出。
方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。
例:括号内是说明
输入
1257
输出
The encrypted number is 4621(每一位上的数字加9除以10取余后,得0146,交换后得到4601)
*/
#include <stdio.h>
int main( )
{
int number, digit1, digit2, digit3, digit4, newnum;
scanf("%d", &number);
digit1 = number/1000;
digit2 = (number - 1000 * digit1)/100;
digit3 = (number - 1000 * digit1 - 100 * digit2)/10;
digit4 = number - 1000 * digit1 - 100 * digit2 - 10 * digit3;
digit1 += 9;
digit1 %= 10;
digit2 += 9;
digit2 %= 10;
digit3 += 9;
digit3 %= 10;
digit4 += 9;
digit4 %= 10;
//第三位数是1的情况不做考虑
newnum = digit3 * 1000 + digit4 * 100 + digit1 * 10 +digit2;
printf("The encrypted number is %d\n", newnum);
return 0;
}
㈧ 输入一个四位正整数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10 取余,
最后是printf("The encrypted number is %d\n",n);
return 0;}
㈨ C++输入一个4位数,将其加密为另一个4位数。加密原则为:每个位 * 7 % 10
//求c语言编程大神出手相救:输入一个三位数,将其加密后输出。
//加密方法使对该数的每一位数字,将其加6除以10取余数,
//作为该位上的新数字,再交换个位数字和百位数字,如输入256加密后的数为218。
#include<stdio.h>
main()
{
int
number=0;
int
i=0;
int
t=0;
int
spilt[3];
printf("输入一个三位数");
scanf("%d",&number);
for(i=0;i<3;i++)
{
spilt[i]=(number%10+6)%10;
number=number/10;
}//把拆分后的数字存入spilt数组
for(i=0;i<3;i++)
{
printf("%d",spilt[i]);
}
printf("\n");
}