अरे मैं फ़ॉर्मूला [x-> (x + shift-1) mod 127 + 1 का उपयोग कर जावा में एक साधारण सीज़र सिफर बना रहा हूं] मैं अपने एन्क्रिप्टेड टेक्स्ट को ASCII वर्ण रखने के लिए चाहता हूं नियंत्रण पात्रों को छोड़कर (यानी 32-127 से)। एन्क्रिप्टेड टेक्स्ट में आवेदन करने वाले 0-31 से नियंत्रण वर्णों से मैं कैसे बच सकता हूं। धन्यवाद।जावा में सरल सीज़र सिफर
उत्तर
कैसे कुछ इस तरह के बारे में:
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 रखने के लिए tweak करना चाह सकते हैं, 126]।
[32..127] से [0..95] तक अपने पात्रों को मानचित्र करें, mod 95+1
करें और परिणाम को [32..127] पर मानचित्र करें।
-1 और नियंत्रण पात्रों के बारे में क्या? किसी भी मदद के लिए –
आमतौर पर सिफर टेक्स्ट बेस 64 एन्कोडेड होता है, बेस 16 (हेक्स) भी अच्छी तरह से काम करता है। बेस 64 का उपयोग अक्सर सिफर टेक्स्ट के लिए किया जाता है क्योंकि यह हेक्स की तुलना में कम जगह लेता है, हेक्स का उपयोग आमतौर पर संदेश डाइजेस्ट के लिए किया जाता है। Java.util.prefs.Base64 लाइब्रेरी में आपको byteArrayToBase64() और base64ToByteArray() मिलेगा।
एक तरफ ध्यान दें कि आपको कभी भी सुरक्षा कारणों से अपना स्वयं का एन्क्रिप्शन एल्गोरिदम नहीं लिखना चाहिए, आपको ब्लॉक सिफर या स्ट्रीम सिफर का उपयोग करना चाहिए। मुझे उम्मीद है कि यह मजेदार है!
वहाँ! क्या पात्रों की पूरी श्रृंखला पर विचार करने का कोई तरीका है? उदाहरण के लिए, "á", "é", "ö", "ñ", और "" [स्पेस]) पर विचार नहीं करते? (उदाहरण के लिए, मेरा स्ट्रिंग "हैलो वर्ल्ड" है, और मानक परिणाम "खुर # ज़्रूग" है; मैं उस "#" को मिटाना चाहता हूं, इसलिए परिणाम "खुरज़्रोग" होगा)
मुझे यकीन है कि मेरा जवाब कोड के इस टुकड़े में है:
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);
}
... लेकिन मैं कुछ बातें की कोशिश की है, और काम नहीं किया: एस तो, मैं अपने जवाब के लिए इंतजार करेंगे: घ मिलते हैं!
क्यों नहीं
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();
}
}
मुझसे संपर्क करें। –
- 1. पायथन में सीज़र सिफर फ़ंक्शन
- 2. सरल पंक्ति पारदर्शी सिफर
- 3. जावा सिफर - एईएस पैडिंग समस्या
- 4. ब्लॉक सिफर और स्ट्रीम सिफर
- 5. सिफर/3DES/CFB/जावा और PHP
- 6. सिफर इनपुटस्ट्रीम केवल 16 बाइट्स (एईएस/जावा)
- 7. जावा में सरल एसएसएच सुरंग
- 8. एक कम्यूटिव सिफर?
- 9. क्यों मेरी एईएस सिफर DECRYPT_MODE
- 10. सरल/प्रत्यक्ष/हियरडॉक जावा
- 11. सरल जावा HTTPS सर्वर
- 12. सरल जावा तिथि गणना
- 13. जावा सरल एन्क्रिप्शन
- 14. जावा: सरल SOAP क्लाइंट
- 15. जावा - सरल गेम
- 16. सरल बैकअप और जावा
- 17. सरल जावा प्रोजेक्ट
- 18. XOR सिफर: अलग-अलग परिणाम
- 19. जावा: वास्तव में सरल स्कैटर प्लॉट उपयोगिता
- 20. जावा में सरल डेटाबेस-जैसे संग्रह वर्ग
- 21. एक जावा कस्टम/सरल टैग
- 22. सरल जावा संदेश प्रेषण प्रणाली
- 23. सरल जावा सेवा खोज ढांचा
- 24. सरल थ्रेड प्रबंधन - जावा - एंड्रॉइड
- 25. सरल जावा नियमित अभिव्यक्ति प्रश्न
- 26. जावा/ग्रोवी - सरल तिथि सुधार
- 27. डिफ़ॉल्ट से अलग सिफर का उपयोग
- 28. मुझे विजिनेर सिफर के लिए जावा स्रोत कोड कहां मिल सकता है? मेरे ऐप में
- 29. जीडब्ल्यूटी में सरल हाइपरलिंक?
- 30. सिफर पाठ के साथ चतुर्थ भेजना, सुरक्षित?
होमवर्क? यदि ऐसा है, तो कृपया इसे इस तरह टैग करें। –