எல்எஸ்பி ஸ்டிகனோகிராபி

ஒரு காலத்தில் நான் என் எழுதினேன் மையத்தில் முதல் இடுகை. அந்த இடுகை மிகவும் சுவாரஸ்யமான பிரச்சனைக்கு அர்ப்பணிக்கப்பட்டது, அதாவது ஸ்டிகனோகிராபி. நிச்சயமாக, அந்த பழைய தலைப்பில் முன்மொழியப்பட்ட தீர்வை வார்த்தையின் உண்மையான அர்த்தத்தில் ஸ்டீகனோகிராபி என்று அழைக்க முடியாது. இது கோப்பு வடிவங்களைக் கொண்ட ஒரு விளையாட்டு, இருப்பினும் ஒரு அழகான சுவாரஸ்யமான விளையாட்டு.

இன்று நாம் கொஞ்சம் ஆழமாக தோண்டி LSB அல்காரிதத்தைப் பார்க்க முயற்சிப்போம். நீங்கள் ஆர்வமாக இருந்தால், பூனையின் கீழ் உங்களை வரவேற்கிறோம். (வெட்டுக்குக் கீழே போக்குவரத்து உள்ளது: சுமார் ஒரு மெகாபைட்.)

முதலில், ஒரு சிறிய அறிமுகம் செய்ய வேண்டியது அவசியம். கிரிப்டோகிராஃபியின் நோக்கம் ரகசிய தகவல்களைப் படிக்க இயலாது என்பது அனைவருக்கும் தெரியும். நிச்சயமாக, குறியாக்கவியல் அதன் பயன்பாடுகளைக் கொண்டுள்ளது, ஆனால் தரவு பாதுகாப்பிற்கு மற்றொரு அணுகுமுறை உள்ளது. நாங்கள் தகவலை குறியாக்கம் செய்ய வேண்டியதில்லை, ஆனால் எங்களிடம் அது இல்லை என்று பாசாங்கு செய்கிறோம். அதனால்தான் ஸ்டெகானோகிராபி கண்டுபிடிக்கப்பட்டது. விக்கிப்பீடியா நமக்கு உறுதியளிக்கிறது, "ஸ்டெகனோகிராபி (கிரேக்கத்தில் இருந்து στεγανοσ - மறைக்கப்பட்ட மற்றும் கிரேக்க γραφω - நான் எழுதுகிறேன், அதாவது "ரகசிய எழுத்து") என்பது பரிமாற்றத்தின் உண்மையை ரகசியமாக வைத்து தகவல்களை மறைக்கப்பட்ட பரிமாற்றத்தின் அறிவியல்.

நிச்சயமாக, கிரிப்டோகிராஃபிக் மற்றும் ஸ்டெகானோகிராஃபிக் முறைகளை இணைப்பதை யாரும் தடை செய்யவில்லை. மேலும், நடைமுறையில் அவர்கள் இதைச் செய்கிறார்கள், ஆனால் அடிப்படைகளைப் புரிந்துகொள்வதே எங்கள் பணி. நீங்கள் விக்கிபீடியா கட்டுரையை கவனமாகப் படித்தால், ஸ்டெகானோகிராஃபி அல்காரிதம்கள் என்று அழைக்கப்படுபவை அடங்கும் என்பதை நீங்கள் கண்டுபிடிப்பீர்கள். கொள்கலன் மற்றும் செய்தி. ஒரு கொள்கலன் என்பது நமது ரகசிய செய்தியை மறைக்க உதவும் எந்த தகவலும் ஆகும்.

எங்கள் விஷயத்தில், கொள்கலன் BMP வடிவத்தில் ஒரு படமாக இருக்கும். முதலில், இந்த கோப்பின் கட்டமைப்பைப் பார்ப்போம். கோப்பை 4 பகுதிகளாகப் பிரிக்கலாம்: கோப்பு தலைப்பு, பட தலைப்பு, தட்டு மற்றும் படம். எங்கள் நோக்கங்களுக்காக, தலைப்பில் என்ன எழுதப்பட்டுள்ளது என்பதை மட்டுமே நாம் தெரிந்து கொள்ள வேண்டும்.

தலைப்பின் முதல் இரண்டு பைட்டுகள் பிஎம் கையொப்பம், பின்னர் பைட்டுகளில் உள்ள கோப்பு அளவு இரட்டை வார்த்தையில் எழுதப்பட்டுள்ளது, அடுத்த 4 பைட்டுகள் ஒதுக்கப்பட்டவை மற்றும் பூஜ்ஜியங்களைக் கொண்டிருக்க வேண்டும், இறுதியாக, மற்றொரு இரட்டை வார்த்தையில் தொடக்கத்தில் இருந்து ஆஃப்செட் உள்ளது. படத்தின் உண்மையான பைட்டுகளுக்கு கோப்பு. 24-பிட் பிஎம்பி கோப்பில், ஒவ்வொரு பிக்சலும் மூன்று பிஜிஆர் பைட்டுகளுடன் குறியாக்கம் செய்யப்பட்டுள்ளது.

இப்போது படத்தை எவ்வாறு பெறுவது என்பது எங்களுக்குத் தெரியும், எஞ்சியிருப்பது நமக்குத் தேவையான தகவல்களை எவ்வாறு எழுதுவது என்பதைப் புரிந்துகொள்வதுதான். இதற்கு நமக்கு LSB முறை தேவைப்படும். முறையின் சாராம்சம் பின்வருமாறு: வண்ண குறியாக்கத்திற்கு பொறுப்பான பைட்டுகளில் குறைவான குறிப்பிடத்தக்க பிட்களை நாங்கள் மாற்றுகிறோம். நமது ரகசியச் செய்தியின் அடுத்த பைட் 11001011 என்றும், படத்தில் உள்ள பைட்டுகள்... 11101100 01001110 01111100 0101100111... என்றால், குறியீட்டு முறை இப்படி இருக்கும். நாங்கள் இரகசிய செய்தி பைட்டை 4 இரண்டு-பிட் பகுதிகளாகப் பிரிப்போம்: 11, 00, 10, 11, மற்றும் படத்தின் குறைந்த-வரிசை பிட்களை அதன் விளைவாக வரும் துண்டுகளுடன் மாற்றுவோம்: ...11101111 01001100 01111110 0101100111…. அத்தகைய மாற்றீடு பொதுவாக மனித கண்ணுக்கு கவனிக்கப்படாது. மேலும், பல பழைய வெளியீட்டு சாதனங்கள் இதுபோன்ற சிறிய மாற்றங்களைக் காட்ட முடியாது.

நீங்கள் 2 குறைந்தபட்சம் குறிப்பிடத்தக்க பிட்களை மட்டும் மாற்றலாம் என்பது தெளிவாகிறது, ஆனால் அவைகளின் எண்ணிக்கை. பின்வரும் முறை உள்ளது: நாம் எவ்வளவு பிட்களை மாற்றுகிறோமோ, அவ்வளவு தகவல்களை மறைக்க முடியும், மேலும் இது அசல் படத்தில் அதிக குறுக்கீடுகளை ஏற்படுத்தும். உதாரணமாக, இங்கே இரண்டு படங்கள் உள்ளன:

எல்எஸ்பி ஸ்டிகனோகிராபி
எல்எஸ்பி ஸ்டிகனோகிராபி

எனது சிறந்த முயற்சிகள் இருந்தபோதிலும், அவற்றுக்கிடையேயான வித்தியாசத்தை என்னால் காண முடியவில்லை, இருப்பினும், இரண்டாவது படத்தில், விவரிக்கப்பட்ட முறையைப் பயன்படுத்தி, லூயிஸ் கரோலின் கவிதை "தி ஹண்டிங் ஆஃப் தி ஸ்னார்க்" மறைக்கப்பட்டுள்ளது. நீங்கள் இதுவரை படித்திருந்தால், செயல்படுத்துவதைப் பற்றி அறிய நீங்கள் ஆர்வமாக இருக்கலாம். இது மிகவும் எளிமையானது, ஆனால் டெல்பியில் எல்லாம் முடிந்துவிட்டது என்று நான் இப்போதே எச்சரிக்கிறேன். இதற்கு இரண்டு காரணங்கள் உள்ளன: 1. டெல்பி ஒரு நல்ல மொழி என்று நான் நினைக்கிறேன்; 2. இந்த திட்டம் கணினி பார்வையின் அடிப்படைகள் குறித்த பாடத்திட்டத்தைத் தயாரிக்கும் செயல்பாட்டில் பிறந்தது, மேலும் இந்த பாடத்திட்டத்தை நான் கற்பிக்கும் தோழர்களுக்கு டெல்பியைத் தவிர வேறு எதுவும் தெரியாது. தொடரியல் பற்றி தெரியாதவர்களுக்கு, ஒரு விஷயத்தை விளக்க வேண்டும்: shl x என்பது x ஆல் இடதுபுறமாக ஒரு பிட்வைஸ் ஷிஃப்ட் ஆகும், shr x என்பது x ஆல் வலப்புறமாக மாறுவது.

ஒரு சரத்தில் சேமிக்கப்பட்ட உரையை கொள்கலனில் எழுதுகிறோம் மற்றும் கீழ் இரண்டு பைட்டுகளை மாற்றுகிறோம் என்று கருதுகிறோம்:
பதிவு குறியீடு:

i:=1 to length(str) do
    தொடங்கும்
      l1:=பைட்(str[i]) shr 6;
      l2:=byte(str[i]) shl 2; l2:=l2 shr 6;
      l3:=byte(str[i]) shl 4; l3:=l3 shr 6;
      l4:=byte(str[i]) shl 6; l4:=l4 shr 6;
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l1;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l2;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l3;
      f.WriteBuffer(tmp,1);
 
      f.ReadBuffer(tmp,1);
      f.Position:=f.Position-1;
      tmp:=((tmp shr 2) shl 2)+l4;
      f.WriteBuffer(tmp,1);
 
    முடிவுக்கு;

படிக்க வேண்டிய குறியீடு:

நான்:=1 செய்ய MsgSize செய்ய
    தொடங்கும்
      f.ReadBuffer(tmp,1);
      l1:=tmp shl 6;
      f.ReadBuffer(tmp,1);
      l2:=tmp shl 6; l2:=l2 shr 2;
      f.ReadBuffer(tmp,1);
      l3:=tmp shl 6; l3:=l3 shr 4;
      f.ReadBuffer(tmp,1);
      l4:=tmp shl 6; l4:=l4 shr 6;
      str:=str+char(l1+l2+l3+l4);
    முடிவுக்கு;

சரி, உண்மையில் சோம்பேறிகளுக்கு - நிரல் மற்றும் அதன் மூலக் குறியீட்டிற்கான இணைப்பு.

Спасибо.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்