সি শার্প
সম্ভাব্য ক্রেজি, রাউন্ডআউট এবং সংশ্লেষিত পদ্ধতিতে (সঠিক) ফলাফলটি পেতে - কেবলমাত্র পরিবর্তনশীল নাম এবং কোনও কোডে কোনও আক্ষরিক "মম" ছাড়াই result
"আপনি যদি কোনও পোস্ট থেকে কোড ব্লক নেন, আপনি পুরো জিনিসটি নিয়ে যান" নিয়মটি পড়া খুব আক্ষরিক অর্থে সম্ভবত কোনও সহায়তা করেনি - তবে এটি আরও মজাদার করে তুলেছে।
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
public class Program
{
void Main()
{
// Step 1
var n = 3;
var helloAndGoodbye = "12345678900"
.Select((c, i) => new { letter = c, group = i / n })
.GroupBy(l => l.group, l => l.letter)
.Select(g => string.Join("", g))
.ToList();
// Step 2
string place = "world";
string greet = String.Format("Hello {0}!", place);
// Step 3
byte[] b1 = System.Text.Encoding.UTF8.GetBytes (greet);
byte[] b2 = System.Text.Encoding.ASCII.GetBytes (greet);
// Step 4
string encryptionKey = "test";
var md5 = MD5.Create();
var keyBytes = Encoding.UTF8.GetBytes(encryptionKey);
byte[] encryptionKeyBytes = md5.ComputeHash(keyBytes);
// Step 5
string strName = md5.GetType().Name;
if(strName == "Person")
{
//My Code
}
// Step 6
string HashAlgorithm = new string(strName.Take(n).ToArray());
// Step 7
int previousYear = DateTime.Now.AddYears(-1).Year;
// Step 8
string myString = previousYear.ToString();
// Step 9
string totallyRandomString = new string(myString.Take(n).ToArray());
// Step 10
int myInt = System.Convert.ToInt32(totallyRandomString);
// Step 11
int x = myInt << 1 + 1;
// Step 12
PasswordDeriveBytes DerivedPassword =
new PasswordDeriveBytes(place, b1, HashAlgorithm, x);
byte[] KeyBytes = DerivedPassword.GetBytes(32);
// Step 13
string base64 = Convert.ToBase64String(KeyBytes);
byte[] bytes = Convert.FromBase64String(base64);
// Step 14
var split = base64.Split('/');
var last = split[split.Length -1];
var prev = split[split.Length -2];
// Step 15
string truncatedToNLength = new string(last.Take(n).ToArray());
// Step 16
Regex rgx = new Regex("[^a-zA-Z0-9 -]");
greet = rgx.Replace(greet, "");
// Step 17
var newString = greet.Replace(place.ToString(), truncatedToNLength);
// Step 18
var searchStr = newString.ToLower();
searchStr = searchStr.Trim();
// Step 19
Console.WriteLine(searchStr);
}
}
.নাইট ফিডল
http://dotnetfiddle.net/PbjhPn
http://dotnetfiddle.net/bg20wb (কোড ব্লকের অপ্রয়োজনীয় লাইনগুলি সরিয়ে)
সংক্ষিপ্ত ব্যাখ্যা
মূলত, আমরা "হ্যালো ওয়ার্ল্ড!" একটি সাধারণ স্ট্রিং বিন্যাস থেকে। এটি প্রতিস্থাপনের জন্য এখন আমাদের "মা" দরকার। তার জন্য, আমরা পাসওয়ার্ড হিসাবে "ওয়ার্ল্ড" এবং "হ্যালো ওয়ার্ল্ড!" এর সাথে এমডি 5 ব্যবহার করে পিবিকেডিএফ 1 এর 804 পুনরাবৃত্তি চালানোর বেস 64 এনকোডযুক্ত ফলাফলটি ব্যবহার করি! নুন হিসাবে। এটি "ciSf5cCls1l / MoM ..." স্ট্রিং দেয় । আমরা সেই "এমওএম" এক্সট্রাক্ট করি এবং এটি "বিশ্বের" প্রতিস্থাপন হিসাবে ব্যবহার করি। তারপরে আমরা স্ট্রিংটি পরিষ্কার করি।
আমরা কীভাবে 804 এ যাব? পূর্ববর্তী বছরটি তিনটি অক্ষরে (= "201") কেটে গেছে এবং তারপরে 4 দ্বারা গুণিত হয়েছে।
দীর্ঘ ব্যাখ্যা এবং গুণাবলী
1: আমরা কিছুটা নিয়ম-অনুসরণ ওভারকিল দিয়ে শুরু করি। পূর্ণসংখ্যা 3 এই প্রোগ্রামে খুব গুরুত্বপূর্ণ ধ্রুবক। এখানে আমরা সেই পূর্ণসংখ্যাকে নির্ধারণ করি n। আমাদের অবশ্যই উত্স থেকে পুরো ব্লকটি অন্তর্ভুক্ত করতে হবে। এটি অপ্রয়োজনীয় হতে পারে তবে এটি ঠিক জরিমানা সংকলন করবে, যতক্ষণ আমরা পরেরটির আমাদের splitপ্রয়োজন পরে নাম পরিবর্তন করব। উৎস
পরিবর্তনশীল নামগুলি প্রতিস্থাপন করা হয়েছে:
split > helloAndGoodbye
2: প্রারম্ভিক স্ট্রিং সেট আপ করুন ("হ্যালো ওয়ার্ল্ড!")। উৎস
এটি আমাদের মায়ের কাছে খুব ব্যক্তিগত বার্তা। সুতরাং সেই এনএসএ ধরণের সাথে মোকাবিলা করার জন্য অবশ্যই আমাদের কিছু ক্রিপ্টোগ্রাফি দরকার। তার জন্য, আমাদের কিছু পরামিতি প্রয়োজন, যা আমরা এখন প্রস্তুত করি।
3: সল্টিংয়ের greetজন্য বাইট অ্যারে রূপান্তর ("হ্যালো ওয়ার্ল্ড!") করুন। উৎস
myString > greet
4: যদিও আমরা ক্রিপ্টোগ্রাফি ব্যবহার করছি, আমাদের আসলে এমডি 5 ক্লাসটি ইনস্ট্যান্ট করার দরকার নেই। তবে আমাদের আরও কিছু নিচে ব্যবহার করার জন্য আমাদের প্যারামিটারগুলির জন্য "এমডি 5" স্ট্রিং দরকার রয়েছে - এবং এটি ব্যবহারযোগ্য কোডে খুঁজে পাওয়া সহজ নয়। সুতরাং আমরা আরেকটি ... "শর্টকাট" নেব ... আবার, পুরো কোড ব্লকটি নিয়ম অনুসারে অন্তর্ভুক্ত করা হয়েছে, যদিও আমাদের কেবল দ্বিতীয় লাইনের প্রয়োজন। উৎস
5: এখন আমাদের md5পরিবর্তনশীল ( MD5CryptoServiceProvider) এর ধরণের নাম প্রয়োজন need ifএখনও অন্য অতিরেক হয়। উৎস
entity > md5
6: টাইপের নামের সাথে প্রথম 3 (ওহ, আমাদের ধ্রুবক আছে!) অক্ষর পান। উৎস
s > strName
truncatedToNLength > HashAlgorithm
7: কোড-ট্রোলিং: ব্যবহারের DateTime.Nowঅর্থ এটি কেবল 2019 পর্যন্ত কাজ করবে it এটি আরও ভবিষ্যতের প্রমাণ হিসাবে তৈরি করতে আমরা আগের বছরটি ব্যবহার করি। তারপরে এটি 2020 ;-) অবধি চলবে Source
8: আমাদের previousYearস্ট্রিং রূপান্তর । উৎস
myInt > previousYear
9: আরে, কোড পুনরায় ব্যবহার! ;-) আমাদের বছরের প্রথম 3 (আমাদের ধ্রুবক!) অক্ষর পান। উৎস
s > myString
truncatedToNLength > totallyRandomString
10: আআআআআআআ্যান্ড ... ফলাফলটিকে পূর্ণসংখ্যায় রূপান্তর করুন। উৎস
myString > totallyRandomString
11: এরিক লিপার্ট প্রতিটি উত্তরকে আরও ভাল করে তোলে। চারদিকে চারদিকে গুণ করুন by উৎস
y > myInt
12: পাঠান place(পাসওয়ার্ড) এবং greetসঙ্গে MD5 ব্যবহার PBKDF1 মাধ্যমে (লবণ) x(যা এখন 201*4 = 804পুনরাবৃত্তিও)। উৎস
Password > place
SaltValueBytes > b1
PasswordIterations > x
১৩: জন স্কিটি প্রতিটি উত্তরকে আরও ভাল করে তোলে। 64. বেস আমাদের উদ্ভূত পাসওয়ার্ড রূপান্তর আমরা বর্জন bytesঅ্যারে। উৎস
bytes (first occurrence) > KeyBytes
১৪: এতো কান্ড! আমাদের এখন base64এটিতে "এমওএম" রয়েছে। সুবিধাজনকভাবে, "মোম" এর ঠিক আগে একক '/' is সুতরাং স্ট্রিমটি সেই চরিত্রের সাথে ডিলিমিটার হিসাবে বিভক্ত করুন: উত্স
filePath > base64
15: আরে, আমাদের প্রিয় কোডটি পুনরায় ব্যবহারের টেপ! এর প্রথম 3 (ধ্রুবক!) চিঠি পান last। উৎস
s > last
16: সরান "!"। উৎস
str > greet
17: মোম আমাদের বিশ্ব - সুতরাং স্ট্রিংটি প্রতিফলিত করুন ("বিশ্ব" কে "মোওম" এর সাথে প্রতিস্থাপন করুন)। উৎস
someTestString > greet
someID > place
sessionID > truncatedToNLength
18: শেষ অবধি, লোয়ার কেসে রূপান্তর করুন। ভাল পরিমাপের জন্য ট্রিম করুন (অথবা সম্ভবত এটি নালী টেপ ব্লকের অংশ)। উৎস
wordToSearchReplacemntsFor > newString
19: কনসোল আউটপুট। উৎস
_surface > searchStr
"বোনাস উপাদান" / মন্তব্য একটি বিট
প্রথমে আমি অন্তর্নির্মিত ক্রিপ্টোগ্রাফিক হ্যাশগুলির প্রতিটি সংমিশ্রণ (প্রতিটি এইচএমএসি এর সাথে মিলিত) এবং ইনপুটগুলি ("বিশ্ব", "হ্যালো ওয়ার্ল্ড!", "হ্যালো ওয়ার্ল্ড", "হ্যালো ওয়ার্ল্ড" ইত্যাদি) চেষ্টা করে দেখেছিলাম যে অলৌকিকভাবে কিছু দেবে কিনা see "মা" থেকে প্রাপ্ত একটি ব্যবহারযোগ্য আউটপুট - পিডিকেডিবি 1 (বা 2) এর বহু সংখ্যক পুনরাবৃত্তি সন্ধানের সহজ রুট গ্রহণ করার আগে যা দরকারী হবে।
201 * 4 = 804 পুনরাবৃত্তির জন্য ইনপুট হিসাবে বছরের ব্যবহারে বেশ খুশি ছিল না। প্রথমে আমি HttpStatusCode.Createdইনপুট হিসাবে ব্যবহার করার জন্য (২০১২) এর জন্য কিছু দরকারী কোড সন্ধান করার চেষ্টা করেছি - "আমরা আমাদের 'হ্যালো ওয়ার্ল্ড!" তৈরি করেছি lines স্ট্রিং, সুতরাং একটি ভাল অনুশীলন হবে এখানে একটি 'তৈরি' স্থিতি কোড 'ব্যবহার করা। দুর্ভাগ্যক্রমে, আমি HttpStatusCodeগণনার এমন কোনও ব্যবহার পাইনি যা বেশিরভাগ এএসপি.নেট ওয়েবএপিআই কাঠামোর উপর নির্ভরশীলতার পরিচয় দেয় না।
কোডটি শুরু করার পরে ("হ্যালো ওয়ার্ল্ড!" স্ট্রিং ফর্ম্যাট) আমি এটি প্রথম যুক্ত করার পরে আর কখনও তাকাতে হয়নি। যদি আমি থাকি তবে হ্যাঁ, আমি বুঝতে পেরেছিলাম যে কার্যনির্বাহীকরণটি placeউত্সের একটি অন্যরকম ব্লকের মধ্যে ছিল - সুতরাং আমি কেবল place"ওয়ার্ল্ড" ব্যবহার না করে এবং পরে এটির পরিবর্তে আমার উদ্ভূত "মাকে" অর্পণ করতে পারতাম । আহ ভালো.