嘿,我正在使用公式[x->(x + shift-1)mod 127 + 1]在Java中創建一個簡單的凱撒密碼。我想讓我的加密文本具有ASCII字符除控制字符外(即32-127)。如何避免0-31中的控制字符應用於加密文本中。謝謝。java中的簡單凱撒密碼
回答
怎麼是這樣的:
public String applyCaesar(String text, int shift)
{
char[] chars = text.toCharArray();
for (int i=0; i < text.length(); i++)
{
char c = chars[i];
if (c >= 32 && c <= 127)
{
// Change base to make life easier, and use an
// int explicitly to avoid worrying... cast later
int x = c - 32;
x = (x + shift) % 96;
if (x < 0)
x += 96; //java modulo can lead to negative values!
chars[i] = (char) (x + 32);
}
}
return new String(chars);
}
誠然,這把127作爲非控制字符,它是不是......你不妨調整它保持範圍是[32, 126]。
將你的角色從[32..127]映射到[0..95],做一個mod 95+1
並將結果映射回[32..127]。
-1那麼控制字符呢? – 2010-06-14 02:07:44
通常密文是base64編碼,base16(十六進制)也適用。 Base64最常用於密文,因爲它佔用的空間比十六進制少,十六進制最常用於消息摘要。在java.util.prefs.Base64庫中,您將找到byteArrayToBase64()和base64ToByteArray()。
在旁註中,出於安全原因,您絕不應編寫自己的加密算法,您應該使用分組密碼或流密碼。我希望這是爲了好玩!
有!有沒有辦法考慮整個角色的範圍?例如,「á」,「é」,「ö」,「ñ」,而不是「」([Space])? (例如,我的String是「Hello World」,標準結果是「Khoor#Zruog」;我想刪除那個「#」,所以結果將是「KhoorZruog」)
我確定我的答案是這段代碼:
if (c >= 32 && c <= 127)
{
// Change base to make life easier, and use an
// int explicitly to avoid worrying... cast later
int x = c - 32;
x = (x + shift) % 96;
chars[i] = (char) (x + 32);
}
...但我已經嘗試了一些東西,而沒有工作:S所以,我會等你的答案:D見你!
爲什麼不試試
for(int i = 0; i < length; i++) { char c = chars[i] if(Character.isLetter(c)) { int x = c - 32; x = (x + shift) % 96; chars[i] = (char) (x+32); } }
副本名爲 「凱撒」 粘貼在NetBeans:
//package caesar;
import java.io.*;
public class caesar {
int offset=3;
public String encrypt(String s) throws IOException
{
StringBuilder sb=new StringBuilder();
for(int i=0;i<s.length();i++)
{
char t=s.charAt(i);
if(t>='A' && t<='Z')
{
int t1=t-'A'+offset;
t1=t1%26;
sb.append((char)(t1+'A'));
}
else if(t>='a' && t<='z')
{
int t1=t-'a'+offset;
t1=t1%26;
sb.append((char)(t1+'a'));
}
}
return sb.toString();
}
public String decrypt(String s) throws IOException
{
StringBuilder sb=new StringBuilder();
for(int i=0;i<s.length();i++)
{
char t=s.charAt(i);
if(t>='A' && t<='Z')
{
int t1=t-'A'-offset;
if(t1<0)t1=26+t1;
sb.append((char)(t1+'A'));
}
else if(t>='a' && t<='z')
{
int t1=t-'a'-offset;
if(t1<0)t1=26+t1;
sb.append((char)(t1+'a'));
}
}
return sb.toString();
}
public static void main(String[] args) {
try
{
System.out.println("Caesar encrypion technique");
BufferedReader b;
String oriTxt,encTxt,decTxt;
System.out.println("Enter string to encrypt:");
b=new BufferedReader(new InputStreamReader(System.in));
oriTxt=b.readLine();
caesar c=new caesar();
encTxt=c.encrypt(oriTxt);
System.out.println("Encrypted text :"+encTxt);
decTxt=c.decrypt(encTxt);
System.out.println("Derypted text :"+decTxt);
}
catch(Exception e)
{
System.out.println(e.toString());
}
}
}
import java.util.Scanner;
//caeser
public class Major_Assingment {
public static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZhh";
public static String encrypt(String plainText,int shiftKey)
{
plainText = plainText.toUpperCase();
String cipherText= " ";
for(int i=0; i<plainText.length(); i++)
{
int charPosition = ALPHABET.indexOf(plainText.charAt(i));
int keyVal = (shiftKey + charPosition)% 26 ;
char replaceVal = ALPHABET.charAt(keyVal);
cipherText += replaceVal;
}
return cipherText;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter the string for Encryption:");
String message = new String();
message = sc.next();
System.out.println(encrypt(message,3));
sc.close();
}
}
任何幫助與我聯繫。 – 2016-09-27 20:53:05
- 1. Java凱撒密碼
- 2. 凱撒密碼簡單程序
- 3. C++簡單凱撒密碼算法
- 4. 凱撒移位密碼java
- 5. 凱撒的密碼
- 6. f中的凱撒密碼#
- 7. 凱撒密碼,Python
- 8. Python凱撒密碼
- 9. 凱撒密碼C#
- 10. 在Java中製作凱撒密碼
- 11. 凱撒密碼加密VB.net
- 12. 凱撒密碼解密器
- 13. 凱撒密碼加密
- 14. C++凱撒密碼加密
- 15. Python:凱撒密碼加密
- 16. 的Java加密凱撒代碼
- 17. 凱撒密碼工作
- 18. 凱撒密碼程序
- 19. 凱撒密碼在C
- 20. 凱撒密碼在C
- 21. 凱撒密碼在python
- 22. 凱撒密碼問題(C)
- 23. JavaScript凱撒密碼算法
- 24. 凱撒密碼 - 怎麼了?
- 25. 凱撒密碼計劃
- 26. 凱撒密碼漏洞
- 27. 凱撒密碼遞歸
- 28. 凱撒密碼功能
- 29. 蠻力凱撒密碼
- 30. 奇怪的行爲,從凱撒凱撒密碼實現
家庭作業?如果是這樣,請標記爲這樣。 – 2009-11-30 18:34:43