ටීඑල්; ඩීආර්: බූලියන් තර්ක භාවිතා නොකරන්න.
පහත බලන්න ඇයි ඔවුන් නරක වන අතර, ඒ වෙනුවට ආකාරය (ඒමත).
බූලියන් තර්ක කියවීම ඉතා අසීරු වන අතර එමඟින් පවත්වා ගැනීමට අපහසු වේ. ප්රධාන ගැටළුව වන්නේ තර්කය නම් කර ඇති ක්රම අත්සන කියවන විට අරමුණ සාමාන්යයෙන් පැහැදිලි වීමයි. කෙසේ වෙතත්, බොහෝ භාෂාවල පරාමිතියක් නම් කිරීම සාමාන්යයෙන් අවශ්ය නොවේ. එම නිසා RSACryptoServiceProvider#encrypt(Byte[], Boolean)
ශ්රිතයේදී කුමන ආකාරයේ සංකේතනයක් භාවිතා කළ යුතුද යන්න බූලියන් පරාමිතිය විසින් තීරණය කරනු ලබන ස්ථානය වැනි ප්රති-රටා ඔබට ඇත .
එබැවින් ඔබට මෙවැනි ඇමතුමක් ලැබෙනු ඇත:
rsaProvider.encrypt(data, true);
නිරයේ true
ඇත්ත වශයෙන්ම අදහස් කරන්නේ කුමක්ද යන්න තීරණය කිරීම සඳහා පා the කයාට ක්රමයේ අත්සන සොයා බැලිය යුතුය . පූර්ණ සංඛ්යාවක් පසු කිරීම ඇත්තෙන්ම නරක ය:
rsaProvider.encrypt(data, 1);
ඔබට කියන තරමට - හෝ ඒ වෙනුවට: සුළු වශයෙන්. නිඛිල සඳහා භාවිතා කළ යුතු නියතයන් ඔබ අර්ථ දැක්වුවද, ශ්රිතය භාවිතා කරන්නන් ඒවා නොසලකා හැර වචනාර්ථයෙන් වටිනාකම් භාවිතා කරයි.
මෙය විසඳීමට ඇති හොඳම ක්රමය ගණනය කිරීමක් භාවිතා කිරීමයි . ඔබට RSAPadding
අගයන් දෙකක් සහිත එනුම් එකක් සමත් විය යුතු නම් : OAEP
නැතහොත් PKCS1_V1_5
ඔබට වහාම කේතය කියවිය හැකිය:
rsaProvider.encrypt(data, RSAPadding.OAEP);
බූලියන්ට තිබිය හැක්කේ අගයන් දෙකක් පමණි. මෙයින් අදහස් කරන්නේ ඔබට තුන්වන විකල්පයක් තිබේ නම්, එවිට ඔබට ඔබේ අත්සන නැවත සකස් කළ යුතු බවයි. සාමාන්යයෙන් පසුපසට ගැළපීම ගැටළුවක් නම් මෙය පහසුවෙන් සිදු කළ නොහැක, එබැවින් ඔබට වෙනත් පොදු ක්රමයක් සමඟ ඕනෑම පොදු පන්තියක් දීර් extend කිරීමට සිදුවේ. ඔවුන් හඳුන්වා දුන් විට මයික්රොසොෆ්ට් අවසානයේ කළේ මෙයයිRSACryptoServiceProvider#encrypt(Byte[], RSAEncryptionPadding)
විසින් බූලියන් වෙනුවට ගණන් කිරීමක් (හෝ අවම වශයෙන් ගණනය කිරීමක් අනුකරණය කරන පංතියක්) භාවිතා කළ ස්ථානය .
සම්පූර්ණ වස්තුවක් හෝ අතුරු මුහුණතක් භාවිතා කිරීම පවා පහසු විය හැකියපරාමිතිය පරාමිතිකරණය කිරීමට අවශ්ය පරාමිතිය ලෙස විය හැකිය. ඉහත උදාහරණයේ දී OAEP පෑඩින් අභ්යන්තරව භාවිතා කිරීම සඳහා හැෂ් අගය සමඟ පරාමිතිකරණය කළ හැකිය. දැන් SHA-2 හැෂ් ඇල්ගොරිතම 6 ක් සහ SHA-3 හැෂ් ඇල්ගොරිතම 4 ක් ඇති බව සලකන්න, එබැවින් ඔබ පරාමිතීන් වෙනුවට තනි ගණන් කිරීමක් පමණක් භාවිතා කරන්නේ නම් ගණන් කිරීමේ අගයන් ගණන පුපුරා යා හැකිය (මෙය මයික්රොසොෆ්ට් විසින් සොයා ගැනීමට යන ඊළඟ කාරණය විය හැකිය ).
බූලියන් පරාමිතීන් මඟින් ක්රමය හෝ පන්තිය හොඳින් සැලසුම් කර නොමැති බව පෙන්නුම් කරයි. ඉහත උදාහරණයේ දී මෙන්: .NET හැරුණු විට වෙනත් ගුප්ත ලේඛන පුස්තකාලයක් ක්රම අත්සනෙහි පෑඩිං කොඩියක් භාවිතා නොකරයි.
මා කැමති සියලුම මෘදුකාංග ගුරුවරුන් පාහේ බූලියන් තර්ක වලට එරෙහිව අනතුරු අඟවයි. නිදසුනක් වශයෙන්, යෝෂුවා බ්ලොච් ඔවුන්ට එරෙහිව ඉතා අගය කරන ලද “ective ලදායී ජාවා” පොතේ අනතුරු අඟවයි. පොදුවේ ඒවා සරලව භාවිතා නොකළ යුතුය. තේරුම් ගැනීමට පහසු එක් පරාමිතියක් තිබේ නම් ඒවා භාවිතා කළ හැකි යැයි ඔබට තර්ක කළ හැකිය. නමුත් එසේ වුවද: ක්රම දෙකක්Bit.set(boolean)
භාවිතයෙන් වඩා හොඳින් ක්රියාත්මක වේ : සහBit.set()
Bit.unset()
.
ඔබට කේතය සෘජුවම ප්රතිනිර්මාණය කළ නොහැකි නම්, නියතයන් අවම වශයෙන් ඒවා කියවිය හැකි පරිදි අර්ථ දැක්විය හැකිය :
const boolean ENCRYPT = true;
const boolean DECRYPT = false;
...
cipher.init(key, ENCRYPT);
වඩා කියවිය හැකි:
cipher.init(key, true);
ඔබට අවශ්ය වුවත්:
cipher.initForEncryption(key);
cipher.initForDecryption(key);
වෙනුවට.