老旧办法
DATA:LV_DATA TYPE STRING.
DATA:LV_HASH TYPE HASH160.
DATA:HASHSTRING TYPE STRING.
DATA:HASHB64STRING TYPE STRING.
LV_DATA = 'SAPsap1234520241105162002'.
CALL FUNCTION 'CALCULATE_HASH_FOR_CHAR'
EXPORTING
ALG = 'MD5'
DATA = LV_DATA
LENGTH = 0
IMPORTING
HASH = LV_HASH
HASHLEN =
HASHX =
HASHXLEN =
HASHSTRING = HASHSTRING
HASHXSTRING =
HASHB64STRING = HASHB64STRING
EXCEPTIONS
UNKNOWN_ALG = 1
PARAM_ERROR = 2
INTERNAL_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
Implement suitable error handling here
ENDIF.
WRITE:/ LV_DATA.
WRITE:/ LV_HASH.
WRITE:/ HASHSTRING.
WRITE:/ HASHB64STRING.
DATA: LV_INPUT TYPE STRING VALUE 'SAPsap1234520241105162002',
LV_MD5 TYPE CHAR32.
CALL FUNCTION 'MD5_CALCULATE_HASH_FOR_CHAR'
EXPORTING
DATA = LV_INPUT
IMPORTING
HASH = LV_MD5.
WRITE /: 'MD5 Hash:', LV_MD5.
这函数的方式和java对接会异常,推荐用类的。
DATA: LV_JSON_MD5 TYPE STRING.
DATA: LV_PARAM TYPE STRING,
LV_PARAM_OUT TYPE XSTRING,
IV_JSON TYPE STRING.
IV_JSON = 'SAPsap1234520241105162002'.
JSON+KEY -> MD5 :
TRY.
CALL METHOD CL_ABAP_HMAC=>CALCULATE_HMAC_FOR_CHAR
EXPORTING
IF_ALGORITHM = 'MD5'
IF_KEY = LV_PARAM_OUT
IF_DATA = IV_JSON
IMPORTING
EF_HMACSTRING = LV_JSON_MD5.
TRANSLATE LV_JSON_MD5 TO LOWER CASE.
CATCH CX_ABAP_MESSAGE_DIGEST INTO DATA(LR_DIGEST).
ENDTRY.
MD5/SHA1
SAP中MD5加密输出32位大写MD5 hash值,如下示例,类中其它方法可对文件流进行散列运算(可用作验证文件是否被篡改)。algorithm设置为'SHA1' 即为使用SHA1算法,SHA1比MD5安全性更高
DATA if_algorithm TYPE string.
DATA if_data TYPE string.
DATA if_length TYPE i.
DATA ef_hashstring TYPE string.
DATA ef_hashxstring TYPE xstring.
DATA ef_hashb64string TYPE string.
DATA ef_hashx TYPE xstring.
if_data = '123456'.
TRY.
cl_abap_message_digest=>calculate_hash_for_char(
EXPORTING
if_algorithm = 'MD5'
if_data = if_data
if_length = 0
IMPORTING
ef_hashstring = ef_hashstring
ef_hashxstring = ef_hashxstring
ef_hashb64string = ef_hashb64string
ef_hashx = ef_hashx
).
CATCH cx_abap_message_digest .
ENDTRY.
WRITE:/ ef_hashstring.
WRITE:/ ef_hashxstring.
WRITE:/ ef_hashb64string.
WRITE:/ ef_hashx.
如果系统没有上述方法,可以使用函数MD5_CALCULATE_HASH_FOR_CHAR或CALCULATE_HASH_FOR_CHAR。
HMAC
对比MD5和SHA1增加了密钥,算法可选MD5/SHA1等,示例如下
DATA if_algorithm TYPE string.
DATA if_key TYPE xstring.
DATA if_data TYPE string.
DATA if_length TYPE i.
DATA ef_hmacstring TYPE string.
DATA ef_hmacxstring TYPE xstring.
DATA ef_hmacb64string TYPE string.
if_data = '123456'.
if_key = '31'. " 字符对应16进制字符串
TRY.
cl_abap_hmac=>calculate_hmac_for_char(
EXPORTING
if_algorithm = 'SHA1' " 加密算法
if_key = if_key " 十六进制密钥
if_data = if_data
if_length = 0
IMPORTING
ef_hmacstring = ef_hmacstring
ef_hmacxstring = ef_hmacxstring
ef_hmacb64string = ef_hmacb64string
).
CATCH cx_abap_message_digest .
ENDTRY.
WRITE:/ ef_hmacstring.
WRITE:/ ef_hmacxstring.
WRITE:/ ef_hmacb64string.
如果系统没有上述方法,可以使用函数CALCULATE_HMAC_FOR_CHAR
DES/3DES/AES
DES 分组加密,以 64 位为分组对数据加密,密钥长度64位,其中56 位有效密钥和8位奇偶校验。
3DES 是基于 DES 的 对称算法,对 一块数据 用 三个不同的密钥 进行 三次DES加密,强度更高,由于3DES加密是使用三组密钥分别对前一步数据进行DES加密,解密,加密操作,因此如果三组密钥相同,则相当于DES加密。
AES 采用 对称分组密码体制,密钥长度支持 128 位、 192 位、256 位,分组长度 128 位,具有更高安全性。是下一代的加密算法标准,速度快,安全级别高。
DES加密暂无资源,3DES加密的实现有根据算法原理使用ABAP复现加密的资源,参考博客
3DES对称加密算法(ABAP 语言实现版) - 江正军 - 博客园
标准类cl_sec_sxml_writer中有3DES(TripleDES)加密,AES加密的方法,可参考博客file-encryption-and-decryption,其中加密模式CBC,填充模式未知,偏移量参数也未知。另外AES加密git地址 :ABAP-AES-git
;由于部分在线3DES加密输出的base64串中带salt,两种加密方式均未在线验证成功。标准方法3DES加密示例如下
DATA: lv_data TYPE string,
lv_data_xstr TYPE xstring,
lv_key_xstr TYPE xstring,
lv_key_str TYPE string,
lv_en_xstr TYPE xstring,
lv_de_xstr TYPE xstring,
lv_de_str TYPE string,
lv_en_str TYPE string.
lv_data = '1234'.
lv_data_xstr = cl_bcs_convert=>string_to_xstring( iv_string = lv_data iv_codepage = '4110' ).
lv_key_xstr = cl_sec_sxml_writer=>generate_key( algorithm = cl_sec_sxml_writer=>co_tdes_algorithm ).
WRITE: / lv_data_xstr.
WRITE: / lv_key_xstr.
WRITE: / lv_key_str.
TRY.
cl_sec_sxml_writer=>encrypt(
EXPORTING
plaintext = lv_data_xstr
key = lv_key_xstr
algorithm = cl_sec_sxml_writer=>co_tdes_algorithm
IMPORTING
ciphertext = lv_en_xstr ).
CATCH cx_root.
ENDTRY.
TRY.
cl_sec_sxml_writer=>decrypt(
EXPORTING
ciphertext = lv_en_xstr
key = lv_key_xstr
algorithm = cl_sec_sxml_writer=>co_tdes_algorithm
IMPORTING
plaintext = lv_de_xstr
).
CATCH cx_root.
ENDTRY.
lv_de_str = cl_bcs_convert=>xstring_to_string( iv_xstr = lv_de_xstr iv_cp = '4110' ).
WRITE: / lv_de_xstr.
WRITE: / lv_de_str.
PS:基于3DES加密和DES加密的原理,理论上3DES加密能够实现,DES加密也可以实现
RSA
RSA加密算法为目前最有影响力的公钥加密算法,ABAP中有两种实现方式,一种是基于算法原理的ABAP版本的加密实现,另一种直接上传密钥文件,使用函数SSFW_KRN_ENVELOPE加密,函数SSFW_KRN_SIGN生成签名。
以上两种形式的RSA加解密均已验证且可以在和外部系统对接中使用,只是需要注意PKCS版本。
其中基于加密原理实现的方法看起来比较吃力,感兴趣的可以了解下相关知识,链接附后;这里简单说明下密钥,公钥私钥实际上是基于数学原理产生的整数对,根据DER编码规则生成对应的十六进制数据,最后对十六进制数据base64处理。
RSA算法原理
RSA密钥格式解析
DER编码规则
RSA大数运算
PKCS规范自行查找
标准函数的使用参考函数组中的单元测试类扩展使用方法。由于效率问题,相对来说建议使用SM69命令来实现RSA的加密,而不是ABAP版本的RSA加解密。
PGP
采用公开密钥加密与传统密钥加密相结合的一种加密技术,无标准方法,GIT代码有PGP-git
博客https://blogs.sap.com/2020/05/01/using-pgp-encryption-in-abap-program/中提到了标准webservice解决,需要PI/PO平台或者cloud版本才能支持,实际使用时为SM69命令结合脚本。
其它
BASE64 在sap系统中比较广泛,标准api很多,有方法cl_http_utility=>if_http_utility~encode_base64,cl_http_utility=>if_http_utility~decode_base64;function scms_base64_encode_str ,scms_base64_decode_str等。
CRC32 循环冗余校验,验证数据正确性 方法cl_abap_zip=>crc32
urlEncode 方法cl_http_utility=>if_http_utility~escape_url或escape( val = iv_urlstring format = cl_abap_format=>e_uri_full ).
hard wired 加密
DATA: lo_encryptor TYPE REF TO cl_hard_wired_encryptor,
string TYPE string,
string_en TYPE string,
string_de TYPE string.
CREATE OBJECT lo_encryptor.
string = '123456'.
TRY.
string_en = lo_encryptor->encrypt_string2string( string ).
CATCH cx_encrypt_error.
ENDTRY.
WRITE:/ string_en.
TRY.
string_de = lo_encryptor->decrypt_string2string( string_en ).
CATCH cx_encrypt_error.
ENDTRY.
WRITE:/ string_de.
ABAP调用钉钉群机器人接口之 使用HmacSHA256算法计算签名,然后进行Base64 encode,得到最终的签名值
FORM getsign USING p_key TYPE string
CHANGING p_sign TYPE string
p_timestamp TYPE string.
DATA:if_data_s TYPE string,
if_data TYPE xstring,
if_key TYPE xstring,
ef_hmacb64string TYPE string,
stamp TYPE timestampl,
stamp_char TYPE char22.
TRY.
if_key = cl_abap_hmac=>string_to_xstring( p_key ).
CATCH cx_abap_message_digest.
ENDTRY.
cl_abap_char_utilities=>newline. =
GET TIME STAMP FIELD stamp.
stamp_char = stamp.
CALL METHOD cl_pco_utility=>convert_abap_timestamp_to_java
EXPORTING
iv_date = CONV #( stamp_char(8) )
iv_time = CONV #( stamp_char+8(6) )
iv_msec = CONV #( stamp_char+15(3) )
IMPORTING
ev_timestamp = p_timestamp.
if_data_s = p_timestamp && cc && p_key.
TRY.
if_data = cl_abap_hmac=>string_to_xstring( if_data_s ).
CATCH cx_abap_message_digest.
ENDTRY.
TRY.
CALL METHOD cl_abap_hmac=>calculate_hmac_for_raw
EXPORTING
if_algorithm = 'SHA256'
if_key = if_key
if_data = if_data
if_length = 0
IMPORTING
ef_hmacstring = ef_hmacstring
ef_hmacxstring = ef_hmacxstring
ef_hmacb64string = ef_hmacb64string.
.
CATCH cx_abap_message_digest.
ENDTRY.
p_sign = cl_http_utility=>escape_url( ef_hmacb64string ).
ENDFORM.
MD5:加密与解密的神秘密码
一、MD5 是什么?
MD5,即 Message Digest Algorithm 5,是一种常用的哈希函数。它能够将任意长度的输入转换为固定长度的128 位哈希值。
在数据完整性验证方面,MD5 发挥着重要作用。例如在下载文件后,可以对下载的文件进行 MD5 加密,然后与提供的 MD5 值进行比对,以确保文件在传输过程中没有被篡改或损坏。就像某个官网提供了一份文件供用户下载,并且提供了这个文件对应的 md5 编码,用户下载文件后进行 md5 操作得到一个编码,如果这个编码和官网提供的编码一样,那么代表文件没有被篡改或者损坏。
在密码存储上,MD5 也被广泛应用。在用户注册或更改密码时,通常会对密码进行 MD5 加密,然后将加密后的密码存储在数据库中。当用户登录时,系统会对用户输入的密码进行 MD5 加密,再与数据库中存储的密码进行比对,从而验证用户的身份。这样即使数据库泄露,也不会直接暴露用户的密码。
MD5还在数字签名等场景中被使用。它可以为数字签名提供基础的哈希值,确保签名的真实性和完整性。
总之,MD5 作为一种哈希函数,在数据完整性验证、密码存储、数字签名等场景中发挥着重要作用,虽然它存在一些安全性问题,但在一些特定场景下仍然具有一定的价值。
二、MD5 的用途
(一)加密用户密码
MD5在加密用户密码方面有着广泛的应用。当用户注册账号时,系统会将用户输入的明文密码通过 MD5 算法转换成一个 128 位的散列值。这个散列值被存储在数据库中,而不是明文密码本身。这样做的好处是极大地提高了用户密码的安全性。即使数据库被黑客攻击,黑客也无法直接获取用户的明文密码。
在用户登录时,系统会再次对用户输入的密码进行 MD5 加密,然后与数据库中存储的散列值进行比对。如果两者一致,那么用户的身份就得到了验证。
例如,一个大型的社交平台可能拥有数百万甚至数千万的用户,为了保护这些用户的密码安全,就会采用MD5 加密用户密码的方式。据统计,目前很多知名的互联网公司都在使用类似的密码加密方式。
(二)文件完整性检查
MD5还可以用于检查文件是否被篡改,确保文件的完整性。当一个文件被创建或传输时,可以计算出该文件的 MD5 值。如果这个文件在后续的使用过程中发生了任何变化,哪怕只是一个字节的改变,其 MD5 值也会发生巨大的变化。
比如在软件下载场景中,开发者会提供软件的 MD5 值。用户下载完软件后,可以通过计算软件的 MD5 值并与开发者提供的 MD5 值进行对比,来判断软件是否在下载过程中被篡改。如果两个 MD5 值一致,那么可以确定文件是完整的;如果不一致,那么文件可能已经被损坏或者被恶意篡改。
在企业的数据存储和传输中,MD5 也起着重要的作用。企业可以使用 MD5 来验证重要文件在传输过程中的完整性,确保数据的准确性和可靠性。据相关数据显示,使用 MD5 进行文件完整性检查可以有效地降低数据损坏和被篡改的风险,提高数据的安全性。
三、MD5 在不同平台的应用
(一)头条等平台
在头条等平台上,MD5 在视频搬运和去重方面发挥着重要作用。如今,头条的搬运越来越难做,但仍有很多人尝试。为了避免被识别为重复内容,人们会采用各种方法修改视频的 MD5 值。比如,一个曾经搬运月入十几万的程序员分享了视频消重的十个点,其中就包括修改视频的 MD5 值。具体方法可以借助软件实现,如修改视频里面的一些参数,使每个视频都有不一样的 MD5 值。此外,还可以通过修改分辨率、去水印、变速、截取视频、转换视频、裁剪视频、加片头片尾、加上水印、调节视频的音量等多种方式进行消重。
头条号视频重复修改 MD5 批量处理去重消重伪原创去水印去 logo 软件也越来越多。这些软件针对视频中的每一帧进行处理,高度去重。有人用这些软件处理视频后,甚至开通了原创功能。然而,需要注意的是,头条接下来会继续打压搬运,最近还会有大动作来专项治理搬运工。所以,在使用这些方法和软件时,要讲究策略,不要生硬地同一平台下载再上传,比如不要头条下载再传头条,可以跨平台操作,从梨视频、好看、快手等下载的消重后传头条。
(二)公众号
在公众号开发中,MD5 也有着广泛的应用。无论是微信小程序、百度小程序还是支付宝小程序开发,涉及到很多官方 sdk 接口调用时,都需要有接口权限。而这些接口权限的获取都要对接口参数做特殊处理后再加密签名,才有接口权限。比如小程序 API 里面的多媒体接口(上传、下载等)、支付接口、统一下单接口等。
具体实现方式如下:首先,通过代码对参数进行处理,如把数组所有元素排序,并按照 “参数 = 参数值” 的模式用 “&” 字符拼接成字符。然后,使用 MD5 或 SHA-1 加密算法对拼接后的字符串进行加密。例如,代码中使用 DigestUtils.md5Hex 方法进行 MD5 加密,使用 MessageDigest.getInstance ("SHA-1") 获取 SHA-1 加密对象进行加密。通过这种方式,可以确保接口参数的安全性和完整性,为公众号的正常运行提供保障。
(三)知乎讨论
在知乎上,关于 MD5 的讨论也非常丰富。比如,有人讨论百度网盘秒传的秘密,可能就涉及到 MD5 的应用。文件的 MD5 值具有唯一性,当上传文件到百度网盘时,如果网盘服务器中已经存在相同 MD5 值的文件,就可以实现秒传,无需再次上传整个文件。
还有关于 “最小的输出自身 MD5 值的程序” 的讨论。这是第二届腾讯极客技术挑战赛的题目,要求打印自身的MD5 值。实现这个目标有两种方法,一种是魔法攻击,直接碰撞得出结果;另一种是平 A,程序逻辑是把生成的 elf 文件读进内存计算其 MD5 值打印出来。这个赛题涉及到很多技术难题,如运行环境的限制、系统调用的屏蔽等。通过这个讨论,可以看出 MD5 在技术挑战中的重要性和难度。
四、MD5 加密原理
(一)算法概述
MD5消息摘要算法,对输入任意长度的消息进行处理,最终产生一个 128 位的消息摘要。它具有不可逆性,即无法从生成的摘要反推出原始消息。同时,相同数据的 MD5 值肯定一样,不同数据的 MD5 值不一样的概率非常小。例如,据统计,MD5 算法生成的摘要有 2 的 128 次方种可能,约为 3.4 * 10 的 38 次方个结果,而世界上可用于加密的数据原则上是无限的,所以碰撞的概率非常小。
(二)数据处理过程
1.数据填充:首先对原始消息进行填充,使消息的长度对 512 取模得 448。如果输入信息的长度(bit)对512 求余的结果不等于 448,就需要填充使得对 512 求余的结果等于 448。填充的方法是填充一个 1 和 n 个 0,此时消息长度变为 N * 512 + 448(bit)。
2.添加消息长度:在第一步结果之后再填充上原消息的长度,用 64 位来存储填充前信息长度。如果消息长度大于 2 的 64 次方,则只使用其低 64 位的值。经过这一步,最终消息长度就是 512 的整数倍,变为(N + 1)* 512 位。
3.数据处理:
1.首先用到四个常数:A = 0x67452301、B = 0xEFCDAB89、C = 0x98BADCFE、D = 0x10325476。
2.接着用到四个非线性函数:F (X,Y,Z)=(X & Y) | ((~X) & Z);G (X,Y,Z)=(X & Z) | (Y & (~Z));H (X,Y,Z)=X ^ Y ^ Z;I (X,Y,Z)=Y ^ (X | (~Z))。
3.然后是四种操作:FF (a,b,c,d,Mi,s,tj) 表示 a = b + ((a + F (b,c,d)+Mi+tj)<<< s);GG (a,b,c,d,Mi,s,tj) 表示 a = b + ((a + G (b,c,d)+Mi+tj)<<< s);HH (a,b,c,d,Mi,s,tj) 表示 a = b + ((a + H (b,c,d)+Mi+tj)<<< s);II (a,b,c,d,Mi,s,tj) 表示 a = b + ((a + I (b,c,d)+Mi+tj)<<< s)。其中 Mi 表示消息的第 i 个子分组(从 0 到 15,共 16 个),<<< s 表示循环左移 s 位。常数 tj 为:在第 j 步中,tj 是 4294967296 * abs (sin (j)) 的整数部分,i 的单位是弧度。
MD5算法将输入的信息进行分组,每组 512 位(64 个字节),顺序处理完所有分组后输出 128 位结果。在每一组消息的处理中,都要进行 4 轮、每轮 16 步、总计 64 步的处理。其中每步计算中含一次左循环移位,每一步结束时将计算结果进行一次右循环移位。通过这些复杂的步骤,MD5 算法能够为输入的消息生成一个独特的 128 位消息摘要。
五、MD5 解密方法
(一)字典攻击
字典攻击是一种常见的破解 MD5 的方法。它通过预先准备好的词典(包含常见密码、词组等)进行尝试性的匹配。例如,有数据显示,一个包含 10000 个常见密码的字典,在破解 MD5 时,成功的概率取决于目标密码的复杂程度。如果目标密码是简单的数字组合或者常见的单词,那么字典攻击就有可能在较短的时间内找到正确的密码。
字典攻击的原理是,将字典中的每个密码进行 MD5 哈希计算,并与加密后的密文进行比对,如果相等则表示找到了正确的密码,否则继续尝试下一个密码。这种方法的优点是相对简单,容易实现。但是,它的局限性也很明显,只能破解出已经被包含在字典中的密码,如果目标密码比较复杂或者是随机生成的,那么字典攻击就很难成功。
(二)彩虹表攻击
彩虹表攻击是对字典攻击的一种优化。它采用一种特殊的数据结构 —— 彩虹表,来加速对哈希值的破解。彩虹表是一种预先计算出的哈希值与明文密码的映射表,可以大大减少破解所需的时间。
彩虹表的原理是通过预先建立一个可逆向的散列链并将其存储在表中。在破解时,先查表得到可能包含结果的散列链,然后在内存中重新计算并得到最终结果。例如,假设我们有一个彩虹表,其中存储了大量的 MD5 哈希值与对应的明文密码。当我们需要破解一个 MD5 密文时,首先通过查表找到可能的散列链,然后在内存中还原整个散列链,从而找到对应的明文密码。
然而,彩虹表攻击也有局限性。首先,彩虹表需要占用大量的存储空间,对于复杂的密码集合,彩虹表的大小可能会非常庞大。其次,随着密码学的发展,现在的密码通常更加复杂,使得彩虹表攻击变得更加困难。此外,使用复杂的加盐等技术也可以增加破解的难度。
(三)穷举攻击
穷举攻击是通过对可能的输入组合进行逐一尝试,直到找到匹配的哈希值。这种方法是最基本的破解方法,但也是最耗时的方法。
穷举攻击的原理是,对所有可能的输入组合进行 MD5 哈希计算,并与目标密文进行比对。如果找到匹配的哈希值,就表示找到了正确的密码。例如,如果我们要破解一个 6 位数字密码的 MD5 密文,那么就需要对从000000 到 999999 的所有数字组合进行尝试。
穷举攻击的难度主要取决于密码的长度和复杂性。对于简单的密码,穷举攻击可能在较短的时间内成功。但是,对于复杂的密码,穷举攻击可能需要耗费大量的时间和计算资源。有数据表明,对于一个 8 位复杂密码的穷举攻击,可能需要数年甚至更长的时间才能成功。
六、MD5 的安全性与局限性
MD5在数据安全方面起到了一定的作用,但也存在着诸多安全隐患和局限性。
首先,MD5 容易受到暴力破解的威胁。暴力破解是通过尝试所有可能的输入组合来找到匹配的哈希值。虽然对于复杂密码来说,暴力破解可能需要耗费大量的时间和计算资源,但随着计算能力的不断提升,暴力破解的可行性也在逐渐增加。例如,对于简单的密码组合,如纯数字密码或常见的单词组合,暴力破解可能在较短的时间内成功。有研究表明,使用高性能的计算机集群进行暴力破解,对于一些简单的密码,可能在几天甚至几小时内就能破解成功。
其次,字典攻击也是 MD5 面临的一个重要威胁。字典攻击利用预先准备好的密码字典进行尝试性的匹配,对于常见密码和简单密码组合具有较高的破解成功率。据统计,大约有 30% 的用户使用常见的密码,如“123456”、“password” 等,这些密码很容易被字典攻击破解。此外,黑客还可以通过收集用户在不同网站上使用的密码信息,构建更强大的密码字典,进一步提高字典攻击的成功率。
然而,为了增强 MD5 的安全性,可以采取一些有效的方法。其中,加盐是一种常用的方法。加盐是在原始密码的基础上,添加一个随机生成的字符串,然后再进行 MD5 哈希计算。这样可以大大增加密码的复杂性,降低被破解的风险。例如,在用户注册时,系统可以生成一个随机的盐值,并将盐值和加密后的密码一起存储在数据库中。在用户登录时,系统将用户输入的密码和盐值再次进行加密,并与数据库中的密码进行比对。这样,即使黑客获取了数据库中的密码信息,也很难通过破解得到原始密码。
此外,还可以采用多重加密的方法来增强 MD5 的安全性。例如,可以先对密码进行 MD5 加密,然后再对加密后的结果进行其他加密算法的处理,如 SHA-256 等。这样可以增加密码的复杂性,提高破解的难度。
总之,MD5 虽然在一定程度上保证了数据的安全性,但也存在被破解的风险。在实际应用中,我们应该充分认识到 MD5 的局限性,并采取有效的安全措施来增强数据的安全性。
我是老周,如果你喜欢我的文字,请记得点击⬇️关注我。
码字不易,文章下拉,右边点个【赞】和【在看】吧!!
猜您还喜欢合集:
猜您还喜欢文章: