维基链解决了区块链 传统行业应用什么痛点?

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
密码学实验之凯撒密码和维吉尼亚密码的加解密.doc 5页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:150 &&
密码学实验之凯撒密码和维吉尼亚密码的加解密
你可能关注的文档:
··········
··········
凯撒密码的加解密源代码:#include&stdafx.h&#include&stdio.h&#include&string.h&intmain(){chars[100],c;inti,p,d,e;printf(&请选择:A.加密B.解密Q.退出\n&);scanf(&%c&,&c);if(c=='a'||c=='A'){printf(&输入明文:&);scanf(&%s&,&s);p=strlen(s);printf(&请设置偏移量:&);scanf(&%d&,&d);for(i=0;i&p;i++){if(s[i]&='a'&&s[i]&='z')s[i]=(s[i]-'a'+d)%26+'a';elseif(s[i]&='A'&&s[i]&='Z')s[i]=(s[i]-'A'+d)%26+'A';elses[i]=s[i]+d;}printf(&%s&,s);printf(&\n\n\n&);}if(c=='b'||c=='B'){printf(&请输入密文:&);scanf(&%s&,&s);p=strlen(s);printf(&请输入加密的偏移变量:&);scanf(&%d&,&d);for(i=0;i&p;i++){if(s[i]&='a'&&s[i]&='z'){e=s[i]-'a'-d;if(e&=0)s[i]=(e+26)%26+'a';elses[i]=e%26+'a';}elseif(s[i]&='A'&&s[i]&='Z'){e=s[i]-'A'-d;if(e&0)s[i]=(e+26)%26+'A';elses[i]=e%26+'A';}elses[i]=s[i]-d;}printf(&%s&,s);printf(&\n\n&);}if(c=='q'||c=='Q')return0;return0;}运行结果是:维吉尼亚密码的加解密源代码:#include&stdafx.h&#include&iostream&#defineMINCHAR32#defineCHARSUM94chartable[CHARSUM][CHARSUM];boolInit();boolEncode(char*key,char*source,char*dest);boolDncode(char*key,char*source,char*dest);intmain(){if(!Init()){cout&&&初始化错误!&&&return1;}charkey[256];charstr1[256];charstr2[256];while(1){do{cout&&&请选择一个操作:1.加密;2.解密;-1.退出\n&;cin&&}while(operation!=-1&&operation!=1&&operation!=2);if(operation==-1)return0;elseif(operation==1)//加密{cout&&&请输入密钥:&;cin&&cout&&&请输入待加密字符串:&;cin&&str1;Encode(key,str1,str2);cout&&&加密后的字符串:&&&str2&&}elseif(operation==2)//解密{cout&&&请输入密钥:&;cin&&cout&&&请输入待解密字符串:&;cin&&str1;Dncode(key,str1,str2);cout&&&解密后的字符串:&&&str2&&}cout&&}retur
正在加载中,请稍后...凯撒密码的加密和解密_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
凯撒密码的加密和解密
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢一个简单的加密和解密程序——凯撒密码
一个简单的加密和解密程序——凯撒密码
发布时间: 19:19:06
编辑:www.fx114.net
本篇文章主要介绍了"一个简单的加密和解密程序——凯撒密码",主要涉及到一个简单的加密和解密程序——凯撒密码方面的内容,对于一个简单的加密和解密程序——凯撒密码感兴趣的同学可以参考一下。
本节将介绍一个简单的加密和解密程序,通过本实例,读者将了解加密和解密内部的过程和相关概念,消除对加密和解密的神秘感。
凯撒密码是罗马扩张时期朱利斯&凯撒(
)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动
位,则字母
。因此,假如有个明文字符串&
&用这种方法加密的话,将变为密文:&
&。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文&
&每个字母左移两位变为&
&。这里,移动的位数&
&是加密和解密所用的密钥。
本实例通过
实现了这一过程,由此可以了解与加密和解密相关的概念。
★ 编程思路
首先获取要加密的内容以及密钥,凯撒密码的密钥即字符移动的位数。由于凯撒密码器的移位是针对字符的,因此需要将待加密的内容中每个字符取出,然后针对每个字符分别加以移位。主要步骤如下:
读取要加密的字符串、密钥
分析:作为示例,程序中通过命令行参数传入要加密的字符串。凯撒密码器的密钥比较简单,只是移动的位数,这里不妨通过命令行参数传入。由于移动的位数为整数,因此使用Integer.parseInt( )方法进行了转换。
取出字符串中每个字符
分析:这里使用字符串类的 charAt()方法取出每个字符,分别加以移位。
对每个字符进行移位
分析:由于字母表中共26个字符,因此移位前先将移动的位数(key)和26取模。由于Java中字符和整型可自动转换,因此将字符加上一个正整数即代表在字母表中右移多少位。如果移动的位数是负值,则代表在字母表中左移多少位。
尽管在移动之前已经将移动的位数和26取了模,但通过这种方式实现右移或左移仍可能发生超界。如字母x右移4位应该是字母b,但将字母x增加4后超出26个字母的范围。因此移位后使用两个if语句判断一下,如果向左超界(
)则增加26;向右超界(
)则减去26。
此外由于大写字母和小写字母判断是否超界的依据不同,程序中将字符分为大写和小写分别处理。
★ 代码与分析
public static void main(String args[])
throws Exception{
String s=args[0];
int key=Integer.parseInt(args[1]);
String es=&&;
for(int i=0;i&s.length( );i++)
{ char c=s.charAt(i);
if(c&='a' && c&='z') // 是小写字母
{ c+=key%26; //移动key%26位
if(c&'a') c+=26; //向左超界
if(c&'z') c-=26; //向右超界
else if(c&='A' && c&='Z') // 是大写字母
{ c+=key%26;
if(c&'A') c+=26;
if(c&'Z') c-=26;
System.out.println(es);
该程序既可用于加密又可用于解密。只要执行:
明文(要加密的字符串)
密钥(移动的位数)
即可加密。
在密钥前面加上负号,将运行
明文(要加密的字符串)
密钥(移动的位数)
即可解密。
如为了加密字符串&
&,可随意取一个密钥如
&是明文,&
如果密钥大于
,程序中移位前会和
取模而将其调整到
以下。因此运行:
同样将输出&
为了将密文&
&解密,需要知道加密该密文所用的密钥
,这样,执行:
将得到明文&
如果密钥和加密时所用的不同,则解密时将得到无意义的输出,如运行
程序将输出&
&。这样,只有知道密钥才能得到原来的密文。
/%B0%A2%C1%C1%D6%AE%C9%F9%BC%BC%CA%F5%B2%A9/blog/item/bcc5f682f48de899f703a60d.html
版权声明:本文为博主原创文章,未经博主允许不得转载。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:&>&&>&&>&&>&凯撒密码的加密解密 简便方便 易懂
凯撒密码的加密解密 简便方便 易懂
上传大小:3KB
凯撒密码的加密解密 方便 快捷
凯撒密码的加密解密 方便 快捷
凯撒密码的加密解密 方便 快捷
综合评分:3.4(5位用户评分)
所需积分:4
下载次数:20
审核通过送C币
创建者:yaqsecurity
创建者:migroom
创建者:caozhy
课程推荐相关知识库
上传者其他资源上传者专辑
安全技术热门标签
VIP会员动态
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:14
可兑换下载积分:28
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
凯撒密码的加密解密 简便方便 易懂
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:JAVA&凯撒密码&加密与解密
import java.*;
public class Practise {
public static void main(String[] args) {
String P = new String();// 明文
String K = new String();// 密钥
String C = new String();// 密文
short LR=-1;//间隔的方向,向左为-1,向右为1
P = "benrencainiaoyizhi";
C = "QTCGTCRPXCXPDNXOWX";
System.out.println("明文:"+P);
System.out.println("密钥:"+K);
System.out.println("密文:"+C+"\n");
CaesarCode caesar=new CaesarCode();
System.out.println("加密:"+caesar.encrypt(P, K, LR));
System.out.println("解密:"+caesar.decrypt(K, C,
LR).toLowerCase());
class CaesarCode {
private char alphabet[] = new char[26];//存储字母表
protected String encrypt(String P,String K,short LR)
int i=0,j=0,n=0;//n是间隔
String C=new String();//密文
P=P.toUpperCase();
P=getNewP(P);
K=K.toUpperCase();
n=getN(K);
//将明文转换成密文
j=String.valueOf(alphabet).indexOf(P.charAt(i));//获取密文字母在字母表所在的下标
j=(j+n*LR+26)&//向左或向右移动n位
C+=(char)(j+65);
protected String decrypt(String K,String C,short LR)
int i=0,j=0,n=0;//n是间隔
String P=new String();//明文
K=K.toUpperCase();
C=C.replaceAll(" +"," ");
C=C.toUpperCase();
n=getN(K);
//将密文转换成明文
j=String.valueOf(alphabet).indexOf(C.charAt(i));//获取密文字母在字母表所在的下标
j=(j+n*LR+26)&//向左或向右移动n位
P+=(char)(j+65);
//获取经过处理的明文
private String getNewP(String P)
char p[] = P.toCharArray();
for (i = 0; i & P.length(); i++) {
if (p[i] & 'A' || p[i] & 'Z')// 将非字母换成空格
p[i] = ' ';
P = String.valueOf(p);
P = P.replaceAll(" +", "");// 将明文的所有空格去掉
//获取间隔
private int getN(String K)
int i=0,n=0;
//生成字母表
for(i=0;i&26;i++)
alphabet[i]=(char)(i+65);//字母A在ASCII表中的值是065
if(isNum(K))
n=Integer.parseInt(K);
n=String.valueOf(alphabet).indexOf(K);//当K不是数字时适用
//判断密钥是否为数字
private boolean isNum(String K)
return K.matches("[0-9]+");//+表示1个或多个(如"3"或"225")
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 维基链 的文章

 

随机推荐