加密程序编写
以下是C 语言编写一个简单的加密解密程序。
假设我们想将原始字符串中的每个字符按照 ASCII 码加上一个固定的偏移量,得到一个加密后的字符串。这个偏移量可以是用户指定的,也可以是程序自动生成的。下面是加密程序的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
printf("Enter a string to encrypt: ");
scanf("%s", input);
int offset;
printf("Enter an offset: ");
scanf("%d", &offset);
for (int i = 0; i < strlen(input); i++) {
input[i] += offset;
}
printf("Encrypted string: %s ", input);
return 0;
}
```
这个程序首先提示用户输入要加密的字符串和偏移量,然后使用一个 for 循环将字符数组中的每个字符加上偏移量。注意,在 C 语言中,字符可以被当作整数来处理。最后,程序输出加密后的字符串。
现在,我们来编写一个解密程序,将加密后的字符串解密回原始字符串。解密程序的代码如下:
```c
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
printf("Enter a string to decrypt: ");
scanf("%s", input);
int offset;
printf("Enter the offset: ");
scanf("%d", &offset);
for (int i = 0; i < strlen(input); i++) {
input[i] -= offset;
}
printf("Decrypted string: %s ", input);
return 0;
}
```
这个程序与加密程序大致相同,唯一的区别是在 for 循环中将字符数组中的每个字符减去偏移量。这样,解密程序就可以将加密后的字符串恢复成原始字符串了。
需要注意的是,这种简单的加密解密方式并不是非常安全,因为它可以被轻易地破解。如果您需要一个更加安全的加密算法,请使用可靠的加密库和算法。
② 利用VB设计一个加密程序
简单判断吧
a = "ABCD"'要加密的大写字母
For i = 1 To 4'循环
b = Asc(Mid(a, i, 1)) + 4'分离字符串为单个
If b > 90 Then b = b - 26'如果大于90
Print Chr(b);'输出加密后字母
Next'循环结束
③ 写一个对文本文件加密的程序和一个解密程序
#include <stdlib.h>
#include<stdio.h>
#define x 4//密钥
/*********定义加密函数**********/
int jiami()
{
FILE *fp1,*fp2; //定义函数指针
char filename[50],ch;
printf("请输入要加密的文件:\n");
scanf("%s",filename) ;
fp1=fopen(filename,"r");
if(fp1==NULL)
{
printf("\n警告!打开文件时出错!\n");
return 0;
} //打开文件失败
// printf("原文件为:\n");
fp2=fopen("jiamihou","w");//新建存放加密后数据的文件jiamihou
if(fp2==NULL)
{
printf("\n警告!打开文件时出错!\n");
return 0;
}
while(!feof(fp1)) //没有到达文件尾,继续读入字符
{
ch=fgetc(fp1); //正确读出原文件
ch=ch+x;//凯萨加密法
//putchar(ch);//显示加密后的文件
fputc(ch,fp2); //将加密后的字符放入文件jiamihou中
}
printf("加密成功!\n");
fclose(fp1);
fclose(fp2);
}
/********定义解密函数*********/
int jiemi()
{
FILE *fp1,*fp2;
char filename[50],ch;
char y;
printf("\n");
printf("请输入要解密的文件:\n");
scanf("%s",filename) ; //要解密的文件名
fp1=fopen(filename,"r");
if(fp1==NULL)
{
printf("\n警告!打开文件时出错!\n");
return 0;
}//打开文件失败
fp2=fopen("jiemihou","w");//新建存放解密后数据的文件jiemihou
if(fp2==NULL)
{
printf("\n警告!打开文件时出错!\n");
return 0;
}
do
{
printf("请输入密码:\n");
scanf("%d",&y) ; //密码
}while(y!=x);
while(!feof(fp1)) //没有到达文件尾,继续读入字符
{
ch=fgetc(fp1); //正确读出原文件
ch=ch-y;//凯萨解密法
//putchar(ch);//显示解密后的文件
fputc(ch,fp2); //将解密后的字符放入文件jiemihou中
}
printf("解密成功!\n");
fclose(fp1);
fclose(fp2);
}
/********定义打开文件********/
int display()
{
FILE *fp;
char filename[50],ch;
printf("\n");
printf("请输入要打开显示的文件:\n");
scanf("%s",filename) ; //要显示的文件名
fp=fopen(filename,"r");
if(fp==NULL)
{
printf("\n警告!打开文件时出错!\n");
return 0;
}//打开文件失败
while(!feof(fp)) //没有到达文件尾,继续读入字符
{
ch=fgetc(fp); //正确读出原文件
putchar(ch);//显示解密后的文件
}
printf("\n");
fclose(fp);
}
/********主函数*************/
void main()
{
int n;
do
{
printf("操作方式如下:\n");
printf("1为加密操作\n");
printf("2为解密操作\n");
printf("3为显示操作\n");
printf("0为退出操作\n");
printf("**************************************");
printf("\n请选择您的操作:\n");
scanf("%d",&n);
switch(n)
{
case 0:
break;
case 1:
printf("\n您选择了加密操作\n");
jiami();
break;
case 2:
printf("\n您选择了解密操作\n");
jiemi();
break;
case 3:
printf("您选择了显示文件操作\n");
display();
break;
default:
printf("请在0-3之间选择\n");
}
}while(n!=0);
printf("您选择了退出操作\n");
system("pause");//系统暂停,输出“按任意键继续...”.包含在<stdlib.h>中
}
④ c语言编写的程序,在输入密码时,如何加密
前言:当今社会是一个信息社会,你的个人信息和聊天记录极有可能被别有用心的人时时刻刻监视着,那么你想不想实现专属于两个人或一个小圈子的人在社交软件上的交流不被任何其他人读懂呢?
下面就给大家提供一个原理极其简单程序极其容易实现的C语言文字加密小程序的实现算法。
在键盘上录入了"今天晚上我不回家吃饭了",将这串字符的ASCLL码全部加1,打印出来是这样的"掘晚晤市嫌臣假接凑负绿"。怎么样,哈哈哈,是不是看完后丈二和尚摸不着头脑?
所以,用这种算法实现对汉字的加密和翻译绝对隐蔽!汉字在计算机中的编码比较复杂,一个汉字在Windows 10系统下的CodeBlocks编译器里占2个字符的位置,我记得我有做过测试,在Cent OS Linux系统下占3个字符的位置。
然而不管一个汉字占几个字符的位置,对每个字符的ASCLL码做加减乘除的运算和逆运算就可以实现对文字的加密和翻译。
下面向大家展示一下源代码(加密算法为将所有字符的ASCLL码加1,翻译算法为将所有字符的ASCLL码减1):
头文件部分:
主函数部分:
下面向大家展示一下加密与翻译的效果:
思考与提高:仅仅将所有字符的ASCLL码加1就实现对文字信息的加密了,会不会很容易被破译呢?请恕我不是密码学专家,这一点我无法回答,但是直观感觉这样加密确实有点简单。
那么我们就可以对字符进行多种更为复杂的处理,比如给所有字符加上一个正负变换的数列、给所有字符加上斐波那契数列等。总之,直观感觉就是越复杂越不容易被破译。
下面向大家展示一下给所有字符加上一个正负变换的数列的加密算法的源代码:
头文件部分:
主函数部分主要是用来调试的,与上面那个简单加密算法的主函数部分相同。
下面向大家展示一下使用这种复杂加密算法加密与翻译的效果:
用了加密程序后,画风是这样的:
⑤ 怎样用VB编写一个文件加密程序
字节逐位倒排序加密法是以比特为单位的换位加密方法,用VB实现的具体算法是:
(1) 以二进制模式打开源文件;
(2) 从源文件第I位读取一个字节,假设为字母“A”,得到“A”的ASCII值为65;
(3) 将65转换成八位二进制串为“01000001”;
(4) 将“01000001”按字节逐位倒排序得另一个八位二进制串“10000010”;
(5) 将“10000010”转换成十进制再写回源文件第I位置,完成一个字节的加密;
(6) 重复(2)、(3)、(4)和(5),直到所有字节加密结束。
为了使程序模块化,我们用函数过程ByteToBin完成将字节型数据转换成二进制串(其实质就是将十进制数转换成八位二进制串);用函数过程BinToByte将二进制串转换成字节型数据(实质是将八位二进制串转换成十进制数):用函数过程Reverse将八位二进制串逐位倒排序。具体程序如下:
Function ByteToBin(m As Byte) As String ' 将字节型数据转换成八位二进制字符串
Dim c$
c$ = ""
Do While m <> 0
r = m Mod 2
m = m \ 2
c$ = r & c$
Loop
c$ = Right("00000000" & c$, 8)
ByteToBin = c$
End Function
Function Reverse(m As String) As String ' 将八位二进制字符串颠倒顺序
Dim i%, x$
x = ""
For i = 1 To 8
x = Mid(m, i, 1) & x
Next i
Reverse = x
End Function
Function BinToByte(m As String) As Byte ' 将八位二进制串转换成十进制
Dim x As String * 1, y%, z%
z = 0
For i = 1 To 8
x = Mid(m, i, 1)
y = x * 2 ^ (8 - i)
z = z + y
Next i
BinToByte = z
End Function
Private Sub Command1_Click()
Dim x As Byte, i%, fname$
fname = InputBox("请输入要加密的文件名!注意加上路径名:")
If Dir(fname) = "" Then
MsgBox "文件不存在!"
Exit Sub
End If
Open fname For Binary As #1 ' 以二进制访问模式打开待加悔穗扒密文件
For i = 1 To LOF(1) ' LOF函数是求文件长度的内部函数
Get #1, i, x ' 取出第i个字节
x = BinToByte(Reverse(ByteToBin(x))) ' 这里调用了三个自定义函数
Put #1, i, x ' 将加密后的这个字节写回到文件原位置
Next i
Close
MsgBox "任务完成!"
End Sub
本例可以完成对任意文件的加密与解密,对同一文件作第一次处理为加密,第二次处理为解族搭密。要调试本程序,碧昌可用记事本在C盘根目录下任意建立一个文本文件(假设为文件名为aaa.txt),其中的内容任意(可以包括字母、汉字、数字、回车符、换行符等)。运行本程序后,在输入文件名的对话框中输入文件名(如:“C:\aaa.txt”)后回车,即可完成对文件的加密。文件加密后,可以在记事本中打开该文件查看加密效果。如果想解密,可再次运行该程序并输入相同文件名。