বেকনের সিফার: স্টেগনোগ্রাফির জন্য একটি পরিচয়


14

এই ছোট্ট পিগি বাজারে গেছে, এই ছোট্ট পিগি কিছু কোড লিখেছিল ...

আহ অপেক্ষা করুন, আমরা সেই বেকন সম্পর্কে কথা বলছি না , আমরা স্যার ফ্রান্সিস বেকন সম্পর্কে কথা বলছি! বিশেষ করে, সাইফার বেকন চিন্তিত মধ্যে প্রয়াত 1500s আরেকটি বার্তা, একটি পদ্ধতি মধ্যে একটি বার্তা গোপন পদ্ধতি হিসেবে steganography

সাইফার তার বিষয়বস্তু না করে পাঠ্যের উপস্থাপনায় বার্তাটি গোপন করে কাজ করে । প্রথমে আপনার বার্তার অক্ষরগুলি বাইনারি (0 থেকে 25 পর্যন্ত) এ এনকোড করা হয়েছে:

দ্রষ্টব্য: দয়া করে আপনার কোডে নীচের এনকোডিংটি ব্যবহার করুন এবং ইনপুটটিতে নম্বর, স্পেস বা অন্যান্য চিহ্নগুলির বিষয়ে চিন্তা করবেন না, যদিও আমি এই অক্ষরগুলিকে তাদের এনকোডিংয়ে অন্তর্ভুক্ত করেছি তাদের জন্য আমি কিছু বোনাস নিতে পারি। আপনি যদি অন্য চিহ্নগুলি অন্তর্ভুক্ত করেন তবে অক্ষরগুলি অবশ্যই এনকোডিংয়ের ফাঁকা স্থান 0-25 দখল করতে হবে।

Letter  Encoding
A       AAAAA
B       AAAAB
C       AAABA
D       AAABB
E       AABAA
F       AABAB
G       AABBA
H       AABBB
I       ABAAA
J       ABAAB
K       ABABA
L       ABABB
M       ABBAA
N       ABBAB
O       ABBBA
P       ABBBB
Q       BAAAA
R       BAAAB
S       BAABA
T       BAABB
U       BABAA
V       BABAB
W       BABBA
X       BABBB
Y       BBAAA
Z       BBAAB

উপরের Aএস এবং Bএসগুলিতে আপনার বার্তায় থাকা সমস্ত অক্ষর এনকোড করে রাখার পরে আপনাকে অবশ্যই আপনার কোডের জন্য দুটি টাইপফেস নির্বাচন করতে হবে । এই উদাহরণে জন্য, আমি টাইপফেস জন্য স্বাভাবিক টেক্সট ব্যবহার করবে Aএবং পাঠ্য বোল্ড করতে টাইপফেস জন্য B

তাই বার্তা

HELLOWORLD

এনকোড করা হয়

AABBB AABAA ABABB ABABB ABBBA BABBA ABBBA BAAAB ABABB AAABB

এবং এখন আমরা ক্যারিয়ারের পাঠ্য সহ এই বাইনারিটি গোপন করি ।

দ্রুত বাদামী শিয়াল অলস কুকুরের উপরে ঝাঁপিয়ে পড়ে এবং মেষপালীরা যে ক্ষেতগুলিতে নজর রাখে g

এটি ঠিক আছে যদি ক্যারিয়ার বার্তা প্রকৃত এনকোড হওয়া বার্তার চেয়ে দীর্ঘ হয় তবে এটি ছোট নাও হতে পারে। যেখানে আমরা ক্যারিয়ারের পাঠ্যটি গা bold়ভাবে পরিণত করেছি সেই অনুযায়ীB এনকোড হওয়া বার্তায় এস রয়েছে সে ,

ক্যু আইসি ভাই W এন ফো এক্স তোমার দর্শন লগ করা এমপি গুলি কুমারটি AZ Y কিগুলি , গ্যাম আমি NG টি তিনি ক্ষেত্র যেখানে মেষপালকদের ঘড়ি রাখে।

যা মার্কডাউন ছাড়া পড়ে reads

Th**e** **qu**ic**k** bro**w**n **fo**x **j**u**mp**s **ove**r **t**h**e** **l**az**y** 
**do**g**s**, gam**b**o**l**i**ng** in t**he** fields where the shepherds keeps watch.

মনে রাখবেন যে আমি বার্তাটি এনকোড করার জন্য ক্যারিয়ার বার্তায় বিরামচিহ্ন ব্যবহার করি নি, তবে বিরামচিহ্ন এনকোড হয়েছে কিনা তা আপনার / /

বিধি

  • আপনার ইনপুটটি আপনাকে এনকোড করার বার্তা এবং একটি ক্যারিয়ার বার্তা হবে। যদি ক্যারিয়ার বার্তা খুব ছোট হয় তবে কোনও ধরণের ত্রুটি বার্তাটি ফেরত দিন।

  • আপনি এনকোডিং জন্য দুটি মুদ্রাক্ষর নির্বাচন করতে হবে Aএবং Bএই ধরনের বড় হাতের, ছোট হাতের অক্ষর ব্যবহার, যেমন, ইটালিক , বোল্ড , বোল্ড, ইটালিক , স্ট্রাইকথ্রু , in code formatইত্যাদি। এই টাইপফেসগুলি এনকোড করার জন্য আপনাকে অবশ্যই স্ট্যাক এক্সচেঞ্জের মার্কডাউন ফর্মটি ব্যবহার করতে হবে ie

    UPPERCASE, lowercase, *italic*, **bold**, 
    ***bold italic***, <s>strikethrough</s>, `in code format`
    
  • উপরের উদাহরণে যেমন দেখানো হয়েছে তেমনই আপনার আউটপুটটি অবশ্যই অবশ্যই এখন-এনকোডেড ক্যারিয়ার বার্তা হতে হবে, যা মার্কডাউন দিয়ে দেখানো বা ছাড়াই প্রদর্শিত হবে।

  • আপনাকে কেবল একটি এনকোডিং অ্যালগরিদম তৈরি করতে হবে। আপনি যে কোনও ডিকোডিং অ্যালগরিদমগুলি সরবরাহ করতে চান তা স্বাগত, তবে লেখার সময় আপনার স্কোরকে সাহায্য করবে বা বাধা দেয় না।

  • আপনার কোড অবশ্যই একটি প্রোগ্রাম বা একটি ফাংশন হতে হবে।

  • এটি কোড গল্ফ, তাই বাইটের ক্ষুদ্রতম সংখ্যাটি জয় করে।

সর্বদা হিসাবে, সমস্যাটি যদি অস্পষ্ট হয় তবে দয়া করে আমাকে জানান। শুভকামনা এবং ভাল গল্ফিং!


3
তাই সত্যিই আপার / লোয়ারকেস ব্যবহার না করার কোনও কারণ নেই, যেহেতু অন্য কিছুর জন্য আরও বেশি বাইট খরচ হয়
মেগো

6
আমি মনে করি "আমরা সেই বেকন সম্পর্কে কথা বলছি না" তে একটি টাইপো আছে , কারণ অবশ্যই আপনি কেভিন বেকন সম্পর্কে কথা বলছিলেন, তাই "বি" কে মূলধন করা উচিত, তাই না?
মার্টিন এন্ডার

উত্তর:


1

পাইথ, 47 বাইট

Vsm.[05jxGd2r~zw0#I}Jr@z~Z+1Z0GBpJ)p?NrJ1J;>zZ

এখানে চেষ্টা করুন

ব্যাখ্যা:

             ~zw                               - Get the first line of input and 
                                               - set z to the next line
            r   0                              - Turn it to lower case
  m                                            - Map each character
        xGd                                    - Get it's position in the alphabet
       j   2                                   - Turn it to base 2
   .[05                                        - Pad the start with 0's
 s                                             - Turn it to a 1d-array (flatten it)
V                                        ;     - For N in above array:
                 #                )            - While 1:
                      @z~Z+1Z                  - Get the current position in the 
                                               - second line and increment the position
                    Jr       0                 - Set J to it lowercased
                  I}          GB               - If it's a letter, break
                                pJ             - Otherwise, print it
                                    ?N         - Is the character code
                                               - (the current 1d-array) 1
                                      rJ1      - Get the current char uppered
                                         J     - Leave it lowered
                                   p           - Print the character
                                           >zZ - Print out the rest of the second input

1

পাইথন 3, 216 211 231 225 207 বাইট

এটি এমন একটি সমাধান যা এর দুটি টাইপফেসের জন্য সাধারণ পাঠ্য এবং মার্কডাউন-স্টাইলের ইটালিক ব্যবহার করে। এবং এটি স্পেস ব্যতীত ক্যারিয়ার বার্তায় সমস্ত কিছু এনকোড করে।

সম্পাদনা: কোডটি ঠিক করতে হয়েছিল যাতে ফলাফলটি সঠিকভাবে মুদ্রণ করতে পারে এবং কোডের নীচে উদাহরণ যুক্ত করে।

সম্পাদনা করুন: ইতালিটি সঠিকভাবে মুদ্রণের ক্ষেত্রে সমস্যার কারণে কোডটি পূর্বে খারাপ / বড় হাতের সমাধানে সম্পাদিত।

def g(s,c):
 c=c.lower();w=[h.upper()for h in s if h.isalpha()];t=''.join("{:05b}".format(ord(i)-65)for i in w);r='';j=m=0
 while t[j:]:a=c[m];x=a!=" ";r+=[a,a.upper()][x*int(t[j])];j+=x;m+=1
 return r+c[m:]

উদাহরণ

>>> g('HELLOWORLD', 'The quick brown fox jumps over the lazy dogs, gamboling in the fields 
where the shepherds keep watch')
'thE QUicK broWn FOx JuMPs OVEr ThE LazY DOgS, gaMbOlINg in THe fields where the shepherds keep watch'

Ungolfed:

def bacon(message, carrier):
    # Lowers the case of the carrier message
    carrier = carrier.lower()
    # Removing all non-alphabetic characters and making the rest uppercase
    words = ""
    for char in message:
        if char.isalpha():
            words += char.upper()
    # Encoding the message
    binary = ""
    for letter in words:
        encode = ord(letter) - 65
        binary += "{:05b}".format(encode)
    # Encoding the carrier message
    result = ""
    bin_index = 0
    char_index = 0
    while bin_index < len(binary):
        letter = carrier[char_index]
        # If letter isn't a space and it needs to be encoded
        if letter != " " and int(binary[bin_index]): 
            letter = letter.upper()
        result += type + letter + type
        # The encoding only proceeds if letter wasn't a space
        bin_index += letter != " "
        # char_index increments whether or not letter was alphabetical
        char_index += 1
    # Return the encoded text and any leftover characters from the carrier message
    return result + carrier[char_index : ]

0

সি, 124 বাইট

এর জন্য আর্গুমেন্টগুলি ASCII- সামঞ্জস্যপূর্ণ এনকোডিংয়ে থাকা প্রয়োজন (যেমন ISO-8859.1 বা UTF-8)। এটি স্থানে বাহককে সংশোধন করে এবং 0 সাফল্যে ফিরে আসে, বা অন্যথায় শূন্য নয়। এনকোডিং হয়A == লোয়ার-কেস এবং B== উচ্চ-কেস। অব্যবহৃত ক্যারিয়ারের অক্ষরগুলি উপরের দিকে সেট করা আছে।

int f(char*p,char*s){int m=16;do{if(isalpha(*s)){*s|=32;*s-=(*p-1)&m?32:0;if(!(m/=2)){m=16;p+=!!*p;}}}while(*++s);return*p;}

ব্যাখ্যা

একটি পরীক্ষা প্রোগ্রাম সহ। প্রথম আর্গুমেন্ট হিসাবে এনকোড করতে অক্ষর এবং দ্বিতীয় হিসাবে ক্যারিয়ার স্ট্রিং পাস করুন।

#include <stdio.h>
#include <ctype.h>

/* ASCII or compatible encoding assumed */
int f(char *p, char *s)         /* plaintext, carrier */
{
    int m=16;                   /* mask */
    do {
        if (isalpha(*s)) {
            *s |= 32;
            *s -= (*p-1)&m ? 32 : 0;
            if (!(m/=2)) {
                /* reset mask and advance unless we reached the end */
                m=16;
                p+=!!*p;
            }
        }
    } while (*++s);

    /* 0 (success) if we finished p, else non-zero */
    return *p;
}

int main(int argc, char **argv)
{
    int r = argc < 3 || f(argv[1], argv[2]);
    if (r)
        puts("~!^%&$+++NO CARRIER+++");
    else
        puts(argv[2]);
    return r;
}

পরীক্ষার আউটপুট:

$ ./66019 "HELLOWORLD" "The quick brown fox jumps over the lazy dogs, gamboling in the fields where the shepherds keep watch."  
thE QUicK broWn FOx JuMPs OVEr ThE LazY DOgS, gamBoLiNG in tHE FIELDS WHERE THE SHEPHERDS KEEP WATCH.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.