จะเข้ารหัสรหัสผ่านโดยใช้ "EncryptByPassPhrase" ได้อย่างไร

แม้ว่าการจัดเก็บรหัสผ่านในฐานข้อมูลอาจเป็นวิธีปฏิบัติที่ได้รับความนิยม แต่โดยทั่วไปแล้วการจัดเก็บรหัสผ่านอย่างถูกต้องนั้นไม่ใช่เรื่องปกติ คุณมีทางเลือกสามทางในการดำเนินการเมื่อคุณเก็บรหัสผ่านไว้ในฐานข้อมูล คุณสามารถบันทึกรหัสผ่านของคุณเป็น:

โดยปกติแล้วเราจำเป็นต้องถอดรหัสค่าที่เข้ารหัสของเราด้วยเหตุผลหลายประการ ดังนั้นตัวเลือกที่ 2“ ข้อความที่เข้ารหัสที่สามารถถอดรหัสได้” มักจะตามมาเพื่อจุดประสงค์นี้

ในบทความนี้เราจะพูดถึงวิธีการ เข้ารหัส และ ถอดรหัส ข้อความมีข้อผิดพลาดเกิดขึ้นขณะดำเนินการดังกล่าวและวิธีใดที่แนะนำให้ปฏิบัติตาม

ข้อความเข้ารหัสที่สามารถถอดรหัสได้:

ทุกคนเข้าใจว่ารหัสผ่านคืออะไรมีคนจำนวนน้อยที่คุ้นเคยกับข้อความรหัสผ่าน ข้อความรหัสผ่านมีความปลอดภัยมากกว่า “เอนโทรปี” เป็นแนวคิดในทฤษฎีเทคโนโลยีสารสนเทศที่อ้างถึงจำนวนการสุ่มที่รหัสผ่านมี โดยปกติแล้วยิ่งรหัสผ่านมีการสุ่มมากเท่าใดแฮกเกอร์ก็ยิ่งยากที่จะทำลายรหัสผ่านได้มากขึ้นเท่านั้น นั่นเป็นเหตุผลที่ควรใช้รหัสผ่านที่ยาวขึ้นเนื่องจากอาจมีมากกว่า "สุ่ม“. การเพิ่มคำลงในรหัสผ่านจะทำให้เอนโทรปีเพิ่มขึ้นได้ ใน SQL Server 2008 ขึ้นไป “ ENCRYPTBYPASSPHRASE” ฟังก์ชันรองรับการเข้ารหัสข้อความรหัสผ่านที่คุณสามารถใช้วลีเช่น “ ฉันชอบไอศกรีม” เป็นรหัสผ่านของคุณมากกว่ารหัสผ่านที่ไม่รองรับช่องว่าง นอกจากนี้ยังสามารถเข้ารหัสรหัสผ่านที่ปลอดภัยยิ่งขึ้นของคุณ

“ ENCRYPTBYPASSPHRASE” ฟังก์ชันช่วยให้เราเข้ารหัสสตริงใด ๆ หรือ ตัวแปร มูลค่าสูงถึง 7975 ไบต์ มันต้องการสองพารามิเตอร์ @ข้อความรหัสผ่านและ @cleartextและส่งคืนค่าที่มีค่าที่เข้ารหัสของชนิด วาร์บินารี่(8000).

เข้ารหัสข้อมูลรหัสผ่านโดยใช้ความยาวบิต 128 คีย์ TRIPLE DES อัลกอริทึม ข้อความรหัสผ่านคือรหัสผ่านที่มีช่องว่าง ประโยชน์ของการใช้ข้อความรหัสผ่านคือการจำประโยคหรือวลีที่มีนัยสำคัญนั้นง่ายกว่าการจำสตริงอักขระที่มีความยาวโดยเปรียบเทียบ

ENCRYPTBYPASSPHRASE:

“ ENCRYPTBYPASSPHRASE” นำเสนอวิธีที่รวดเร็วและง่ายดายในการเข้ารหัสคอลัมน์ข้อมูลของ SQL Server ฟังก์ชันนี้มีให้ใน SQL Server 2008 และขึ้น.

ไวยากรณ์:

EncryptByPassPhrase (@passphrase, @cleartext)

อาร์กิวเมนต์:

@ รหัสผ่าน:

คีย์ที่ไม่สมมาตรถูกสร้างขึ้นจากข้อความรหัสผ่าน ซึ่งสามารถเป็น varchar, char, varchar, binary, ตัวแปร หรือ NCHAR ตัวแปรชนิดที่มีข้อความรหัสผ่านเพื่อสร้างคีย์สมมาตร ประเภทข้อมูลอื่น ๆ เช่น DATE ก่อนอื่นคุณต้องแปลงเป็นค่าไบนารีอย่างชัดเจนเพื่อเข้ารหัสวันเกิด

@cleartext:

อัน NVARCHAR, char, วาร์ชาร์, ไบนารี่, ตัวแปร หรือ NCHAR พิมพ์ตัวแปรที่มีข้อความธรรมดา ขีดสุด ขนาดคือ แปดพันไบต์.

ประเภทการคืนสินค้า:

ตัวแปร ด้วย 8,000 ไบต์ ขนาดสูงสุด

การนำไปใช้:

สร้างตาราง dbo.encrypted_data ([Id] INT IDENTITY (1,1) PRIMARY KEY, [password] VARBINARY (8000));

ค่า id จะไม่ถูกเข้ารหัส ในขณะที่คอลัมน์รหัสผ่านเป็นประเภท ตัวแปร (8000)ซึ่งตรงกับประเภทผลตอบแทนของไฟล์ ENCRYPTBYPASSPHRASE ฟังก์ชัน

INSERT INTO dbo.encrypted_data ([รหัสผ่าน]) VALUES (ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'นี่คือหมายเลขบัตรเครดิตของฉัน!'));

จะเห็นว่าพารามิเตอร์แรกคือข้อความรหัสผ่านซึ่งให้คีย์สมมาตร ในขณะที่ค่าที่สองคือค่าข้อความที่ต้องเข้ารหัส

เลือก * จาก encrypted_data

ชุดผลลัพธ์จะมีลักษณะดังนี้

คำสั่งของ SELECT ส่งคืนค่าเป็นตัวแปรเช่น:

“ 0x0100000078F5CB03AC1B86BC26D82F51E0296B6B96D9F19F16D74BE2118AFFC4FE63390D5B99F11E62890AA8A53F6EF510AF6F4D”

สิ่งสำคัญคือต้องสังเกตว่าไฟล์ ตัวแปร ค่าที่ส่งคืนจาก เข้ารหัสลับรหัสผ่าน คือ ไม่กำหนด ซึ่งหมายความว่าจะไม่สร้างผลลัพธ์เดียวกันทุกครั้งแม้จะมีอินพุตเดียวกันก็ตาม ดังนั้นคำสั่ง SELECT เดียวกันถ้าเราเรียกใช้สองครั้งเราจะได้ผลลัพธ์ที่แตกต่างกันสองแบบ

เลือก ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'นี่คือหมายเลขบัตรเครดิตของฉัน!'); SELECT ENCRYPTBYPASSPHRASE('SQL SERVER 2017','นี่คือหมายเลขบัตรเครดิตของฉัน!'); เลือก ENCRYPTBYPASSPHRASE ('SQL SERVER 2017', 'นี่คือหมายเลขบัตรเครดิตของฉัน!');

คำสั่ง select จะให้ไว้ดังนี้:

“ 0x010000002D69EDEEA6B486FAF38FB353CF2682EE30B450488109BD0E23B88E03CD48F72673C6A462B210D6CE38E00E9F8BA18AB7” สำหรับคำสั่งแรกเลือก

“ 0x010000007C5736E4B0F15D971D771D2D146924F741D2DB04477C882A6BAF65703F01D950B1AD01E7E4E27E89243F6A4F549170E2” สำหรับคำสั่งที่สอง

“0x010000009B49BEBAB4B5E510C0C2998604A005617398631C2EBFB0E3C08DDF27C2A06F447FC11BD10B416C7E58038109EBD52021” สำหรับคำสั่งที่สาม

DECRYPTBYPASSPHRASE:

เราต้องสามารถถอดรหัสได้ในขณะนี้เนื่องจากรหัสผ่านของเราได้รับการเข้ารหัส สิ่งนี้ทำได้อย่างง่ายดายโดยใช้คุณสมบัติ DECRYPTBYPASSPHRASE ด้วยข้อความรหัสผ่านเดียวกันกับที่เราเข้ารหัสรหัสผ่านของเรา

ดำเนินการตามรหัสต่อไปนี้ และคุณจะได้รับรหัสผ่านที่มีอักขระตัวเลขและตัวอักษรยาวเป็นผลลัพธ์เช่นนี้

“ 0x0100000078F5CB03AC1B86BC26D82F51E0296B6B96D9F19F16D74BE2118AFFC4FE63390D5B99F11E62890AA8A53F6EF510AF6F4D”

เลือก id, DECRYPTBYPASSPHRASE ('SQL SERVER 2017', รหัสผ่าน) เป็นรหัสผ่านจาก encrypted_data

นั่นไม่ใช่รหัสผ่าน ชอบ ENCRYPTBYPASSPHRASE, DECRYPTBYPASSPHRASE ส่งคืน a VARBINARY ค่าที่จะเข้ารหัสเป็นสตริงที่ใช้งานได้ โดยการเพิ่มฟังก์ชัน CONVERT หรือ cast ในคำสั่ง SELECT ของเราสามารถทำได้อย่างง่ายดาย

Facebook Twitter Google Plus Pinterest