BOUNCY CASTLE KRIPTOGRAFIK KUTUBXONASIDAN
FOYDALANIB MA’LUMOTLARNI SHIFLASH.
BOUNCY CASTLE dan xavfsizlik ta'minotchisi sifatida foydalanish
B ouncy Castle-dan xavfsizlik ta'minotchisi sifatida foydalanish uchun sizning class yo'lingizda Jar bo'lishi kerak. Keyin, ushbu yozuvdan keyin java.security faylini yangilashingiz yoki provayderni ish vaqtida ro'yxatdan o'tkazish uchun quyidagi kodni qo'shishingiz mumkin.
Ma'lumotlarni tinch holatda shifrlash uchun biz nosimmetrik shifrlashdan foydalanamiz
Agar siz nosimmetrik shifrlashni yaxshi bilmasangiz, bu aslida shifrlash uchun ham, parolni hal qilish uchun ham bitta kalitdan foydalanishni anglatadi. Shifrlashning boshqa turi assimetrik shifrlash bo'lib, u ikkita kalitda ishlaydi, biri ochiq va ikkinchisi shaxsiy.
E ng oddiy yondashuv - himoya qilmoqchi bo'lgan barcha ma'lumotlar uchun umumiy kalitdan foydalanish. Biroq, salbiy tomoni shundaki, agar hujumchi kalitga kirish huquqiga ega bo'lsa, hujumchi faqat bitta kalit bilan barcha ma'lumotlarni parolini hal qilishi mumkin.
Agar sizning ma'lumotlaringiz alohida foydalanuvchilarga tegishli bo'lsa, yanada xavfsiz yondashuv - foydalanuvchi tomonidan berilgan parol / parol (parolga asoslangan shifrlash (PBE)) asosida har bir foydalanuvchi uchun alohida kalitlarni olishdir. Shunday qilib, yomoni, bitta foydalanuvchi uchun kalitni biladigan tajovuzkor faqat ushbu foydalanuvchi uchun ma'lumotlarni parolini hal qilishi mumkin.
BOUNCY CASTLE da AES / CBC / PKCS7Padding shifrlash
Quyida biz xabarni AES algoritmi bilan shifrlashni yozishga, shuningdek unga SHA512 algoritmi haqida raqamli imzo qo'shishga harakat qilamiz.
Avvalo, yangi Maven loyihasini yaratib, "pom.xml" fayliga bog'liqlik qo'shaylik:
org.bouncycastle
bcprov-jdk16
1.46
AESEngine nusxasini yaratamiz:
Hozircha hamma narsa oddiy. Ammo siz shunchaki AES dan foydalana olmaysiz. Shifrlash blokirovkalash rejimidan foydalanishimiz kerak, shunda keyingi blokning shifrlash natijasi oldingisining shifrlash natijasiga bog'liq bo'ladi. Bunday taktika tajovuzkorning o'rtaga qo'shimcha bloklar qo'yishiga to'sqinlik qiladi, shuningdek, bizning barcha harakatlarimizga putur etkazishi mumkin bo'lgan shifrlangan matnda keng tarqalgan iboralarni topishni qiyinlashtiradi. Cipher Block Chaining biz uchun CBCBlockCipher class ni amalga oshiradi:
Endi yana bitta muammoni hal qilishimiz kerak. AES va CBC bloklarda ishlaydi. Ixtiyoriy uzunlikdagi satrlarni uzatmoqdamiz. Agar biz uzatayotgan satrninfg kattaligini blok kattaligiga qoldiqsiz bo'lish mumkin bo'lmasa-chi? Blok o'lchamidan kichikroq qolgan dumni qanday o'tkazaman? Buning uchun to'ldirish yoki padding, ya'ni xabar oxiriga qo'shilgan qo'shimcha ma'lumotlar ishlatiladi. Biz PKCS7 padding vositasidan foydalanamiz:
SHA512 yordamida shifrlangan xabarlarni imzolaymiz:
AES va SHA512 algoritmlari biz o'z kodimizga baytlar qatorida o'tadigan kalitlardan foydalanadi:
HMac nusxasiga kalit berilishi kerak:
Shuningdek, biz boshlang'ich vektori (Initialization Vector yoki IV) kerak - bu tasodifiy raqam, u kalit bilan birga shifrlash va parolni hal qilish algoritmida ishlatiladi. Har bir yangi xabar turli xil IVga ega bo'ladi, bu sizga xabarlarning bir xil qismlari uchun ham turli xil shifrlash natijalarini yaratishga imkon beradi. Biz etkazilgan xabarlar, masalan, odamlarning ismlari, salomlashish yoki boshqa biron bir narsani takrorlashi mumkinligini tushunamiz. IV tufayli shifrlash turli xil xabarlarda takrorlanadigan matn qismlari uchun turli xil natijalarni beradi:
E'tibor bering, biz IV ishlab chiqarish uchun odatiy Random emas, balki SecureRandomdan foydalanganmiz. Normal Random kriptografik tasodifiy sonlarni yaratish uchun mos emas.
Shifrni kalitlarga va IV-ga o'tkazib, uni ishga tushiramiz:
IV ni yashirish shart emas. Qabul qiluvchiga shifrlangan xabarning birinchi bloki sifatida yuborilishi mumkin va aniq matnda IV da hech qanday sir yo'q:
Keyin hamma narsa oddiy. Biz cipher.processBytes va hmac.update ni chaqiramiz, ularga asl xabardan o'qilgan bayt bloklarini uzatamiz va nihoyat oxirgi blokni hisoblash va yozish uchun cipher.doFinal-ga, shuningdek imzoni hisoblash uchun hmac.doFinal-ga murojat qilamiz:
Va eng muhimi! Oxir-oqibat, biz foydalanishda RAM-da shaxsiy ma'lumotlar va kalitlarga ega bo'lmasliklari uchun jarayonda ishlatiladigan barcha baytli qatorlarni nollar bilan to'ldiramiz:
Yakuniy natija:
Dostları ilə paylaş: |