c简单实现Feistel加解密

关于上次数组越界的问题已经解决,内部定义的数组,函数结束时内存可能被回收。同一个函数定义的变量和数组之类,地址在方法栈中应该是连续的,如果字符串数组不定义结束符,%s输出会越界读取。
采取的方法是
1.尽量使用外部的数组或者指针,或者在函数内部手动分配空间(手动分配空间,系统并不会自动回收空间)!
因为外部指针(数组)在函数内进过修改,不用return,函数结束时影响也在,是直接修改对应地址的值。
2.数组尽量多分配几个空间,以便定义结束符号
3.可以采用数据断点来判断是否越界
以下是正确的feistel算法简单实现,还需留意的是明文加密最后,密文的组成是RiLi,而非LiRi,所以与前面加密分开理解。而解密时最后一步也是如此。


#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>


int main()
{
  int i=0,j=0;

  char key[50];        //key最大位数50位,但是还是只取16位

  char plaintext[100];   //明文

  char pGroup[10][10]; //明文组
 
  char keyGroup[16][17]; //密码组

  void encryption(char pGroup[10][10],char keyGroup[16][17]); 

  void decryption(char pGroup[10][10],char keyGroup[16][17]);
 
  void generateKey(char  key[50],char keyGroup[16][17]);

  void makeGroup(char plaintext[100],char pGroup[10][10]);
 
  memset(plaintext,0,sizeof(plaintext)/sizeof(char));

  memset(key,0,sizeof(key)/sizeof(char));

  memset(pGroup,0,sizeo
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值