加密和解密——顺序结构程序设计

一、题目

请模拟有限字符的加密和解密过程:

1)请输入一组密码(4位数)

2)请输入待加密的文本,这里只需要输入4个字符,如“girl”

3)加密的规则是将对应数位加到字符上,变成新的字符如输入1524四位数密码,则最终输出"hntp"

4)解密,就是在原来字符的基础上减去对应数字,再输出。

二、解题

(1)解题思路

输入的文本转化成ASCII码存储在变量中,设置的密码存储在变量中,将前面两个数字相加得到新数字并以字符形式输出作为加密文本,最后输入密码并判断密码正确性然后执行解密。

(2)运行界面截图

(3)

代码:

#include <stdio.h>

int main()

{

    int a,b,c,d,aa,bb,cc,dd;//定义存储文本字符ASCII码值和设置的密码的变量 

    printf("请输入要加密的文本(如girl):");

    scanf("%c%c%c%c",&a,&b,&c,&d);//输入的字符分别转换成ASCII码存放在a,b,c,d 

    printf("请设置一串数字密码来加密该文本(如1234):");

    scanf("%d%d%d%d",&aa,&bb,&cc,&dd);//输入的数字密码存放在aa,bb,cc,dd 

    int aaa,bbb,ccc,ddd;//定义存储密码的变量 

    printf("操作成功,加密后文本为:");

    printf("%c%c%c%c\n",a+aa,b+bb,c+cc,d+dd);//文本字符ASCII码加上设置的密码后输出相应字符 

    printf("请输入密码获取文本内容:");

    scanf("%d%d%d%d",&aaa,&bbb,&ccc,&ddd);

    if((aaa==aa)&&(bbb==bb)&&(ccc=cc)&&(ddd=dd))//判断输入的密码和设置的密码是否一致,有错即错 

    {

        printf("密码正确,文本内容为:%c%c%c%c",a,b,c,d);//第二种就是将地址表列改为原来字符减去密码(如a-aa) 

    }

    else

    {

        printf("密码错误!");//if条件不成立则实行else 

    }

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java加密解密 function encrypt(str, pwd) { if(pwd == null || pwd.length <= 0) { alert("Please enter a password with which to encrypt the message."); return null; } var prand = ""; for(var i=0; i<pwd.length; i++) { prand += pwd.charCodeAt(i).toString(); } var sPos = Math.floor(prand.length / 5); var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5)); var incr = Math.ceil(pwd.length / 2); var modu = Math.pow(2, 31) - 1; if(mult < 2) { alert("Algorithm cannot find a suitable hash. Please choose a different password. \nPossible considerations are to choose a more complex or longer password."); return null; } var salt = Math.round(Math.random() * 1000000000) % 100000000; prand += salt; while(prand.length > 10) { prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString(); } prand = (mult * prand + incr) % modu; var enc_chr = ""; var enc_str = ""; for(var i=0; i<str.length; i++) { enc_chr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / modu) * 255)); if(enc_chr < 16) { enc_str += "0" + enc_chr.toString(16); } else enc_str += enc_chr.toString(16); prand = (mult * prand + incr) % modu; } salt = salt.toString(16); while(salt.length < 8)salt = "0" + salt; enc_str += salt; return enc_str; } function decrypt(str, pwd) { if(str == null || str.length < 8) { alert("A salt value could not be extracted from the encrypted message because it's length is too short. The message cannot be decrypted."); return; } if(pwd == null || pwd.length <= 0) { alert("Please enter a password with which to decrypt the message."); return; } var prand = ""; for(var i=0; i<pwd.length; i++) { prand += pwd.charCodeAt(i).toString(); } var sPos = Math.floor(prand.length / 5); var mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos*2) + prand.charAt(sPos*3) + prand.charAt(sPos*4) + prand.charAt(sPos*5)); var incr = Math.round(pwd.length / 2); var modu = Math.pow(2, 31) - 1; var salt = parseInt(str.substring(str.length - 8, str.length), 16); str = str.substring(0, str.length - 8); prand += salt; while(prand.length > 10) { prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString(); } prand = (mult * prand + incr) % modu; var enc_chr = ""; var enc_str = ""; for(var i=0; i<str.length; i+=2) { enc_chr = parseInt(parseInt(str.substring(i, i+2), 16) ^ Math.floor((prand / modu) * 255)); enc_str += String.fromCharCode(enc_chr); prand = (mult * prand + incr) % modu; } return enc_str; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值