现代与古典密码学概览:从ASCII到非对称加密

需积分: 12 3 下载量 149 浏览量 更新于2024-07-09 收藏 3.17MB PPTX 举报
"Crypto.pptx 是一份关于密码学的演示文稿,涵盖了古典密码学和现代密码学的主要概念,以及CTF(Capture The Flag)竞赛中常见的古典密码学技巧。内容包括了各种加密方法、编码技术和数字签名等基础知识。" 在密码学中,古典密码学与现代密码学构成了其丰富的历史和技术基础。古典密码学主要依靠设计者的创新和对手的破解智慧,其中包括单表替换加密,如凯撒密码,通过固定位移改变字母顺序;多表替换加密,如维吉尼亚密码,利用多个替换表增加破解难度;以及一些奇特的加密方法,如摩斯密码、栅栏密码等。这些方法虽然相对简单,但在早期通信安全中起到了一定作用。 随着科学的发展,现代密码学在20世纪中叶开始兴起,特别是香农的开创性工作,引入了信息论的概念,奠定了现代密码学的理论基础。现代密码学主要分为对称加密、非对称加密、哈希函数和数字签名四大领域。对称加密,如DES、AES和RC4,特点是加密和解密使用相同的密钥,适合大数据量的快速加密。非对称加密,如RSA、ElGamal和椭圆曲线加密,使用一对公钥和私钥,公钥可公开,私钥必须保密,用于身份验证和数据加密。哈希函数,如MD5、SHA-1和SHA-512,将任意长度的信息压缩为固定长度的摘要,常用于数据完整性校验。数字签名,如RSA签名、ElGamal签名和DSA签名,结合非对称加密,用于确保数据的来源和完整性,防止篡改。 在CTF竞赛中,参赛者可能会遇到各种古典密码学的挑战,例如ASCII编码的解析,用于将字符转换为数值;摩尔斯密码的解密,基于长短信号的编码方式;以及Base编码家族,如Base64,用于在网络传输中表示二进制数据。还有一些较为罕见的编码方式,如Brainfuck和Ook!编码,它们是编程语言,但也可以用作加密手段。此外,还有当铺密码、培根密码、猪圈密码等,这些古典密码在特定情况下可能成为解谜的关键。 对于解密CTF中的古典密码,有时需要利用词频分析,即统计文本中字母出现的频率,以找出潜在的密文模式。例如,在给定的示例中,通过对ASCII码的比较,可以发现密文和明文之间的规律,进而解密出隐藏的flag。 密码学是一门深奥且重要的学科,它不仅涉及历史上的加密技术,也涵盖了现代信息技术的安全基础。无论是古典密码学的技巧还是现代密码学的原理,都对网络安全、数据保护以及数字身份验证等领域有着深远的影响。理解和掌握这些知识,对于从事信息安全相关工作或参与CTF竞赛的人来说,都是必不可少的。

grant execute on dbms_crypto to system; declare input_string VARCHAR2 (200) := 'Secret Message'; output_string VARCHAR2(2000); encrypted_raw RAW(2000); decrypted_raw RAW(2000); num_key_bytes NUMBER := 256/8; key_bytes_raw RAW(32); encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; begin DBMS_OUTPUT.PUT_LINE(input_string); key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes); encrypted_raw := DBMS_CRYPTO.ENCRYPT ( src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw ); decrypted_raw := DBMS_CRYPTO.DECRYPT ( src => encrypted_raw, typ => encryption_type, key => key_bytes_raw ); output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8'); DBMS_OUTPUT.PUT_LINE(output_string); end; declare l_src_data varchar2(20); l_type pls_integer :=DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_encval raw(2000); CURSOR secret_cursor IS select phonenumber from customer; begin OPEN secret_cursor; LOOP FETCH secret_cursor INTO l_src_data; l_encval :=dbms_crypto.encrypt( src=>utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); DBMS_OUTPUT.PUT_LINE (l_encval); EXIT WHEN secret_cursor%NOTFOUND; END LOOP; CLOSE secret_cursor; end; declare ;_src_data row(100) :=hextoraw("190248129038903853275ijdkvjkad'); l_type pls_integer :=dbms_crypto.encrypt_aes128+ + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_decval raw(200); begin l_decval :=dbms_crypto.decrypt( src=>l_src_data, typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); end; SELECT Price FROM PRODUCT WHERE ProductID = 5;修正这一段代码

2023-05-26 上传