字元串移位加密
『壹』 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