字符串移位加密
‘壹’ c语言,输入一个字符串,采用字母后移五位的办法加密,后面几个字母加五后需要回到前面
int i,j,k; char temp;
for(j=0;j<m;j++){
temp=w[j];//此处有误,每次循环时j都比之前+1,但是按你的逻辑此处应该是首字母
for(i=0,k=0;i<=N-1,k<=N-2;i++,k++)
w[k]=w[i+1];
w[N-1]=temp;
}
你的逻辑是这样:
假如字符串是abcdefgh,要将前三个字母移至末尾,则要经过
1.bcdefgha,在这一步,也就是temp=w[0];
for(i=0,k=0;i<=N-1,k<=N-2;i++,k++)
w[k]=w[i+1];
所达到的;
2.第二步进行之前,字符串是bcdefgha,要将b后移,显然应该将b存成temp,b后面的前移,
所以第二步依然是
temp=w[0];
for(i=0,k=0;i<=N-1,k<=N-2;i++,k++)
w[k]=w[i+1];
以达到
cdefghab;
3,同样把c暂存,c后面前移,则获得最后要得到的字符串defghabc。
所以只需要把我在程序中标出的语句改了就可以运行了。
【另外:在
for(i=0,k=0;i<=N-1,k<=N-2;i++,k++)
w[k]=w[i+1];
此处其实k和i的作用一样,没有必要用两个变量,可合二为一:
for(i=0;i<=N-1,k<=N-2;i++)
w[i]=w[i+1];
追问:
我暗号你写的写成这样子:
int i,k,temp=w[0],j;for(j=0;j<m;j++)
{
for(i=0,k=0;i<N-1,k<=N-2;i++,k++)
{
w[k]=w[k+1];
w[N-1]=temp;
for(i=0,k=0;i<=N-1,k<=N-2;i++,k++) {
temp=w[0];
w[k]=w[k+1];
w[N-1]=temp;
}
}
}
还是没有改变啊!
追答:
int i,j,k; char temp;
for(j=0;j<m;j++){
temp=w[j];//此处有误,每次循环时j都比之前+1,但是按你的逻辑此处应该是首字母
for(i=0,k=0;i<=N-1,k<=N-2;i++,k++)
w[k]=w[i+1];
w[N-1]=temp;
}
就应该是
int i,j,k; char temp;
for(j=0;j<m;j++){
temp=w[0];
for(i=0,k=0;i<=N-1,k<=N-2;i++,k++)
w[k]=w[i+1];
w[N-1]=temp;
}
‘贰’ 位加密(或移位加密)代码怎么样写
char getkey(char txt) { char e = "dfwkekgodsfdfwkdsf";//一定位数的字符串,比如32位 int ctr=0; char tmp = ''; for (int i=0;i<strlen(txt);i++) { if (ctr == strlen(e)) ctr=0;//当ctr长度为上面 e 的长度时,重新置为0 tmp += substr(txt,i,i+1) ^ substr(e,ctr,ctr+1);//将 txt的第i个字符 与 e 的第 ctr个字符 异或运算 并添加入 tmp字串中 ctr++;// ctr 自增 } return tmp;//返回得到的tmp字串 } char encrypt(txt) { srand((double)microtime()*1000000);//设置时间种子 char encrypt_key = md5(rand(0,32000));//得到32为加密字串; 这里目的就是每次运行时得到的字串都不一样 int ctr=0; int tmp = ""; for (int i=0;i<strlen(txt);i++) { if (ctr==strlen(encrypt_key)) ctr=0; tmp += substr(encrypt_key,ctr,ctr+1) . (substr(txt,i,i+1) ^ substr(encrypt_key,ctr,ctr+1)); ctr++; } return getkey(tmp); } char decrypt(txt) { char txt = getkey(txt); char tmp = ""; for (int i=0;i<strlen(txt);i++) { md5st = substr(txt,i,i+1); i++; tmp += (substr(txt,i,i+1) ^ md5st); } return tmp; }
‘叁’ java对字符串进行简单的移位加密
md5单向加密,不可逆.
‘肆’ 用c语言把字符串加密,包括字母和数字,向后偏移三位,需要运用到函数。帮忙改一下错啊。。
#include<stdio.h>
void sec(char str[]);
void main()
{
char str[10];
int i=0;
printf("input 10 chars:\n");
for(i=0;i<10;i++)
scanf("%c",&str[i]);//<————这里输入的时候你写的不对!
sec(str);
for(i=0;i<10;i++)
printf("%c",str[i]);
}
void sec(char str[])
{
int i;
for(i=0;str[i]!='\0';i++)
{
char x=str[i];
if((x>='a'&&x<='z')||(x>='A'&&x<='Z')||(x>='0'&&x<='9'))
x=x+3;
str[i]=x;//<————————这里要把转换完的x再赋给str[i]
}
}
‘伍’ LabView对字符串进行加密,规则是每个字母后移5位,例如A变为F,b变为g,x变为c,y变为d…
利用字符串转字节函数计算后在用字节数组转字符串函数还原成字符串就可以。
length
Code = Code + c
txtCode.Text = Code
单个字母转化
#include<stdio.h>
int main()
{
char a;
while((a=getchar())!=EOF)
{
getchar();
if('A'<=a&&a<='Z')
a='Z'-a+'A';
putchar(a);
putchar(' ');
}
return 0;
}
(5)字符串移位加密扩展阅读:
整数或浮点数数值在转换成字符串时,字符串由表示这些数值的数字字符组成(浮点数还包含有指数部分)。
数组将被转换成字符串 "Array",因此无法通过echo()或者print()函数来输出数组的内容。请参考下文以获取更多提示。
对象将被转换成字符串 "Object"。如果因为调试需要,需要将对象的成员变量打印出来,请阅读下文。如果希望得到该对象所依附的类的名称,请使用函数get_class()。自 php 5 起,如果合适可以用 __toString() 方法。
‘陆’ 编写一个Java加密程序,把字符串中字符向前移一位,如输入“12345”,则输出是“23451”。
publicstaticvoidmain(String[]args){
Stringstr="12345";
Stringstr1=str.substring(1,str.length())+str.substring(0,1);
System.out.println("原数据:"+str+"转化后数据:"+str1);
}
‘柒’ java 移n位加密字符串,如hello移1位加密后ifmmp
楼上那么复杂干嘛?全部代码我都看不下去,操作字符进行位移就是简单的加法,直接相加即可:
‘捌’ vb对字符串加密(偏移3位)
Private Sub Command1_Click()
Dim a() As String, b() As Integer, n As Integer
n = Len(txtinputbox)
Print n
ReDim a(n)
ReDim b(n + 3)
For i = 1 To n
a(i) = Mid(txtinputbox, i, 1)
b(i) = Asc(a(i)) + 3
If b(i) > Asc("Z") And b(i) < Asc("a") Then b(i) = Asc("A") + b(i) - Asc("Z") - 1
If b(i) > Asc("z") Then b(i) = Asc("a") + b(i) - Asc("z") - 1
a(i) = Chr(b(i))
codelabel.Caption = codelabel.Caption & a(i)
Next
End Sub
‘玖’ 修改一个VB移位字符串能加密或解密
以下改过的编码及解码在输入时不区分大小写.输出全部为大写.看符合你的要求不:
=========二次修改==================
Private Function EncryptCode(ByVal sSourceCode As String, ByVal iPosition As Integer)
sSourceCode = UCase(sSourceCode)
Dim I As Integer
Dim Char As String
Dim sTargetCode As String
j = 0
For I = 1 To Len(sSourceCode)
Char = Mid(sSourceCode, I, 1)
sTargetCode = sTargetCode & Chr(65 + (Asc(Char) + (iPosition + j) Mod 26 - 65) Mod 26)
j = j + 1
Next I
EncryptCode = sTargetCode
End Function
'解密
Private Function RevertCode(ByVal sTargetCode As String, ByVal iPosition As Integer)
sTargetCode = UCase(sTargetCode)
Dim I As Integer
Dim Char As String
Dim sSourceCode As String
j = 0
For I = 1 To Len(sTargetCode)
Char = Mid(sTargetCode, I, 1)
If (Asc(Char) - (iPosition + j) Mod 26) < 65 Then
sSourceCode = sSourceCode & Chr(65 + (Asc(Char) - (iPosition + j) Mod 26 - 39) Mod 26)
Else
sSourceCode = sSourceCode & Chr(65 + (Asc(Char) - (iPosition + j) Mod 26 - 65) Mod 26)
End If
j = j + 1
Next I
RevertCode = sSourceCode
End Function
================================================
65 + (Asc(Char) + (iPosition + j) Mod 26 - 65) Mod 26
1. (iPosition + j) Mod 26 目的是当偏移位置超过26时折回, 如偏移27个位置, 27 mod 26=1 ,实际在0~25的序列中就是偏移1个位置
2. 65是"A"的ascii码,它是26个大写字母的开始位置.公式中-65及第二个mod 26 是为了得到加偏移后字符在A~Z(0~25)序列间的位置.
3. 65+(0~25)间的偏移位置,就是转换后字符的ascii码.
‘拾’ java 字母移位加密
【可加密,也可解密(-key)】
public class Wangyf {
public static void main(String[] args) {
String str = "i am student zzzZZZ";
//加密
String str2 = getString( str, 1 );
System.out.println(str2);
//解密 用 -KEY
System.out.println(getString( str2, -1));
}
private static final char C1 = 'a';
private static final char C2 = 'z';
private static final char C3 = 'A';
private static final char C4 = 'Z';
public static String getString(String str, int key) {
key %= 26;
if(key == 0 ){
return str;
}
char[] chars = str.toCharArray();
for(int i = chars.length - 1 ; i >= 0 ; i --){
if(chars[i] >= C3 && chars[i] <= C4){
chars[i] += key;
if(chars[i] > C4){
chars[i] = (char) ( chars[i] -C4 + C3 - 1);
}else if(chars[i] < C3){
chars[i] = (char) (C4 - (C3 -chars[i]) + 1);
}
} else if(chars[i] >= C1 && chars[i] <= C2){
chars[i] += key;
if(chars[i] > C2){
chars[i] = (char) ( chars[i] - C2 + C1 - 1);
}else if(chars[i] < C1){
chars[i] = (char) (C2 - (C1 - chars[i]) + 1);
}
}
}
return new String( chars );
}
}
【测试结果】
j bn tuvefou aaaAAA
i am student zzzZZZ