C语言实现加密解密功能

加密主要是通过一种算法对原内容进行处理,使原来内容不直观可见。解密过程通常要知道加密的算法,然后对加密后的内容进行逆处理,从而实现解密功能。当然解密也有一些暴力破解的方法。接下来以 c 语言 为例讲解一种简单的加密解密以及暴力破解字符串的方法,带您走进加密解密技术的大门。

先讲一下凯撒加密,凯撒密码相传是古罗马凯撒大帝用来保护重要军情的加密系统。它是一种置换密码,通过将字母顺序推后起到加密作用。如字母顺序推后 3 位,字母 A 将被推作字母 D,字母 B 将被推作字母 E。本实例类似于凯撒加密。

加密算法:

大(小)写字母加密后还为大(小)写字母。大(小)写字母向后推 n 位,n 由用户输入,如果超出大(小)写字母的 ASCII 范围,则返回至第一个大(小)写字母继续循环。

解密算法(与加密算法正好相反):

大(小)写字母解密后还为大(小)写字母。大(小)写字母向前推 n 位,n 由用户输入,如果超出大(小)写字母的 ASCII 范围,则返回至最后一个大(小)写字母继续循环。

代码如下:

/*字符串加密解密程序 凯撒加密*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//函数encode()将字母顺序推后n位,实现文件加密功能
void encode(char str[],int n){
 char c;
 int i;
 for(i=0;i<strlen(str);++i){ //遍历字符串
  c=str[i];
  if(c>='a' && c<='z'){ //c是小写字母
   if(c+n%26<='z'){ //若加密后不超出小写字母范围
    str[i]=(char)(c+n%26); //加密函数
   }else{ //加密后超出小写字母范围,从头开始循环小写字母
    str[i]=(char)(c+n%26-26);
   }
  }else if(c>='A' && c<='Z'){ //c为大写字母
   if(c + n%26 <= 'Z'){ //加密后不超出大写字母范围
    str[i]=(char)(c+n%26);
   }else{ //加密后超出大写字母范围,从头开始循环大写字母
    str[i]=(char)(c+n%26-26);
   }
  }else{ //不是字母,不加密
   str[i]=c;
  }
 }
 printf("\nAfter encode: \n");
 puts(str); //输出加密后的字符串
}

//decode()实现解密功能,将字母顺序前移n位
void decode(char str[],int n){
 char c;
 int i;
 //遍历字符串
 for(i=0;i<strlen(str);++i){
  c=str[i];
  //c为小写字母
  if(c>='a' && c<='z'){
   //解密后还为小写字母,直接解密
   if(c-n%26>='a'){
    str[i]=(char)(c-n%26);
   }else{
    //解密后不为小写字母了,通过循环小写字母处理为小写字母
    str[i]=(char)(c-n%26+26);
   }
  }else if(c >= 'A' && c<='Z'){ //c为大写字母
   if(c-n%26>='A'){ //解密后还为大写字母
    str[i]=(char)(c-n%26);
   }else{ //解密后不为大写字母了,循环大写字母,处理为大写字母
    str[i]=(char)(c-n%26+26);
   }
  }else{ //非字母不处理
   str[i]=c;
  }
 }
 printf("\nAfter decode: \n");
 puts(str); //输出解密后的字符串
}//该函数代码有冗余,读者可改进

int main()
{
 char str[50];
 int k=0,n=0,i=1;
 printf("\nPlease input strings: ");
 scanf("%s",str); //输入加密解密字符串
 //打印菜单
 printf("-----------------\n");
 printf("1: Encryption\n");
 printf("2: Decryption\n");
 printf("3: Violent Crack\n"); //暴力破解
 printf("-----------------\n");
 printf("\nPlease choose: ");
 scanf("%d",&k);
 if(k==1){ //加密
  printf("\nPlease input number: ");
  scanf("%d",&n);
  encode(str,n);
 }else if(k==2){ //解密
  printf("\nPlease input number: ");
  scanf("%d",&n);
  decode(str,n);
 }else{
  for(i=1;i<=25;++i){ //尝试所有可能的n值进行暴力破解
   printf("%d ",i);
   decode(str,i);
  }
 }
 return 0;
}

测试运行如下:

成功实现加密解密功能,读者可以稍加改造完成对文件的加密解密

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言实现任何文件的加密解密功能

    本文实例为大家分享了C语言实现文件加密解密功能的具体代码,供大家参考,具体内容如下 使用命令提示符,实现任何文件的加密和解密功能. 代码如下: //#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include<time.h> #include<sys/stat.h> #pragma warning(disabl

  • C语言实现无规律数据加密、解密功能

    在网络传输重要信息或存储重要文件信息时,大部分会对数据加密,保证数据的安全性.互联网上流行的可逆加密方式对数据的安全性没有保证,便自己写了一套安全性极高加密.解密方法. 方法的实现方式及特点: 1.采用指定单个字节加密转换(转换形式为ascll码表中0-128的形式,由1个字节拆分为三个字节,下面说明拆分方式): 2.采用数组中随机数据减指定加密字节(比如当前数据ascll码为121,当前数组中的数据为222,结果为222-121=101,当然这个只是参考实例): 3.采用随机指定数组方式(如果

  • C语言实现加密解密功能

    加密主要是通过一种算法对原内容进行处理,使原来内容不直观可见.解密过程通常要知道加密的算法,然后对加密后的内容进行逆处理,从而实现解密功能.当然解密也有一些暴力破解的方法.接下来以 c 语言 为例讲解一种简单的加密解密以及暴力破解字符串的方法,带您走进加密解密技术的大门. 先讲一下凯撒加密,凯撒密码相传是古罗马凯撒大帝用来保护重要军情的加密系统.它是一种置换密码,通过将字母顺序推后起到加密作用.如字母顺序推后 3 位,字母 A 将被推作字母 D,字母 B 将被推作字母 E.本实例类似于凯撒加密.

  • python实现对服务器脚本敏感信息的加密解密功能

    背景 在实际项目实施中,会编写很多在服务器执行的作业脚本.程序中凡是涉及到数据库链接.操作系统用户链接.IP地址.主机名称的内容都是敏感信息.在纯内网系统中往因为开发时间紧迫,往往都直接将这些敏感信息明文方式写在脚本中了. 稍微规范一点的,创建一个通用的config文件,将所有这类敏感信息记录在这个文件中,脚本以读取文件方式获取这些信息.这种方式的好处是脚本不用在应用迁移.灾备部署的时候再起不同的版本,尤其是大数据平台作业运行的脚本,如果是需要做灾备集群,这种方式可以减少生产变更时的人工干预操作

  • php实现的三个常用加密解密功能函数示例

    本文实例讲述了php实现的三个常用加密解密功能函数.分享给大家供大家参考,具体如下: 算法一: //加密函数 function lock_url($txt,$key='www.jb51.net') { $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $nh = rand(0,64); $ch = $chars[$nh]; $mdKey = md5($key.$ch); $mdKe

  • go语言base64加密解密的方法

    本文实例讲述了go语言base64加密解密的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (     "encoding/base64"     "fmt" ) const (     base64Table = "123QRSTUabcdVWXYZHijKLAWDCABDstEFGuvwxyzGHIJklmnopqr234560178912" ) var coder = base6

  • jQuery实现base64前台加密解密功能详解

    本文实例讲述了jQuery实现base64前台加密解密功能.分享给大家供大家参考,具体如下: 关于加密,很多人想到encodeURI和escape.这个对加密url,尤其是带中文参数的url很有用. 如果只是想做加密解密,类似于Java的DES,网上jQuery有个jquery.base64.js. (关于js的md5加密可以用jquery.md5.js,有兴趣可以找来测试一下). 下面是测试: <html> <head> <title></title> &

  • java使用Hex编码解码实现Aes加密解密功能示例

    本文实例讲述了java使用Hex编码解码实现Aes加密解密功能.分享给大家供大家参考,具体如下: 这里的Aes加密解密方法使用Hex进行了编码解码 package com.baidu.wallet.bdwallet.utils; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; i

  • C#实现简单的3DES加密解密功能示例

    本文实例讲述了C#实现简单的3DES加密解密功能.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Security.Cr

  • C#使用DES和AES实现加密解密功能示例

    本文实例讲述了C#使用DES和AES实现加密解密功能.分享给大家供大家参考,具体如下: using System; using System.Text; using System.Security.Cryptography; using System.IO; namespace MyCryptography { /// <summary> /// DES加密解密 /// </summary> public class DES { /// <summary> /// 获取

  • Java实现文件的加密解密功能示例

    本文实例讲述了Java实现文件的加密解密功能分享给大家供大家参考,具体如下: package com.copy.encrypt; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; impor

随机推荐