不是人人都能活的低调,可以低调的基础是随时都能高调。
下一篇: python3使用hmac、hashlib加密字符串方法封装
本篇文章介绍一种方法在文件夹中查找指定文件:
1、方法【get_all_file】:根据给出的路径进行递归,找到文件夹下所有的文件,以生成器的方式返回(占用内存低),也可以添加到列表(list)(占用内存高)。
2、方法【expand_list】:递归嵌套列表,展开列表,此步骤根据数据结构,如果自己的文件的地址是多层嵌套的列表,可以使用该方法展开列表。
3、方法【find_file】:查找指定文件。
以上方法根据自己的需求进行选择使用,有不足的地方,请各位大佬指出。
如果感觉本文对您有帮助可以点个赞哦
本文仅供交流学习,请勿用于非法途径
仅是个人意见,如有想法,欢迎留言
哈希如果需要用到安全哈希算法或是消息摘要算法,那么你可以使用标准库中的 hashlib 模块。这个模块包含了符合 FIPS(美国联邦信息处理标准)的安全哈希算法,包括 SHA1,SHA224,SHA256,SHA384,SHA512 以及 RSA 的 MD5 算法。Python 也支持 adler32 以及 crc32 哈希函数,不过它们在 zlib 模块中。
哈希的一个最常见的用法是,存储密码的哈希值而非密码本身。当然了,使用的哈希函数需要稳健一点,否则容易被破解。另一个常见的用法是,计算一个文件的哈希值,然后将这个文件和它的哈希值分别发送。接收到文件的人可以计算文件的哈希值,检验是否与接受到的哈希值相符。如果两者相符,就说明文件在传送的过程中未经篡改。
让我们试着创建一个 md5 哈希:
>>>import hashlib >>>md5 = hashlib.md5() >>>md5.update('Python rocks!') Traceback (most recent call last): File "<pyshell#5>", line 1, in <module>md5.update('Python rocks!') TypeError: Unicode-objects must be encoded before hashing >>>md5.update(b'Python rocks!') >>>md5.digest() b'\x14\x82\xec\x1b#d\xf6N}\x16*+[\x16\xf4w'
让我们花点时间一行一行来讲解。首先,我们导入 hashlib ,然后创建一个 md5 哈希对象的实例。接着,我们向这个实例中添加一个字符串后,却得到了报错信息。原来,计算 md5 哈希时,需要使用字节形式的字符串而非普通字符串。正确添加字符串后,我们调用它的 digest 函数来得到哈希值。如果你想要十六进制的哈希值,也可以用以下方法:
>>>md5.hexdigest() '1482ec1b2364f64e7d162a2b5b16f477'
实际上,有一种精简的方法来创建哈希,下面我们看一下用这种方法创建一个 sha1 哈希:
>>>sha = hashlib.sha1(b'Hello Python').hexdigest() >>>sha '422fbfbc67fe17c86642c5eaaa48f8b670cbed1b'
可以看到,我们可以同时创建一个哈希实例并且调用其 digest 函数。然后,我们打印出这个哈希值看一下。这里我使用 sha1 哈希函数作为例子,但它不是特别安全,读者可以随意尝试其他的哈希函数。
密钥导出
Python 的标准库对密钥导出支持较弱。实际上,hashlib 函数库提供的唯一方法就是 pbkdf2_hmac 函数。它是 PKCS#5 的基于口令的第二个密钥导出函数,并使用 HMAC 作为伪随机函数。因为它支持“加盐(salt)”和迭代操作,你可以使用类似的方法来哈希你的密码。例如,如果你打算使用 SHA-256 加密方法,你将需要至少 16 个字节的“盐”,以及最少 100000 次的迭代操作。
简单来说,“盐”就是随机的数据,被用来加入到哈希的过程中,以加大破解的难度。这基本可以保护你的密码免受字典和彩虹表(rainbow table)的攻击。
让我们看一个简单的例子:
>>>import binascii >>>dk = hashlib.pbkdf2_hmac(hash_name='sha256', password=b'bad_password34', salt=b'bad_salt', iterations=100000) >>>binascii.hexlify(dk) b'6e97bad21f6200f9087036a71e7ca9fa01a59e1d697f7e0284cd7f9b897d7c02'
这里,我们用 SHA256 对一个密码进行哈希,使用了一个糟糕的盐,但经过了 100000 次迭代操作。当然,SHA 实际上并不被推荐用来创建密码的密钥。你应该使用类似 scrypt 的算法来替代。另一个不错的选择是使用一个叫 bcrypt 的第三方库,它是被专门设计出来哈希密码的。
1. HMACSHA1似乎是你所需要的算法:SecretKeySpec keySpec = new SecretKeySpec("qnscAdgRlkIhAUPY44oiexBKtQbGY0orf7OV1I50".getBytes(),
"HmacSHA1")
Mac mac = Mac.getInstance("HmacSHA1")
mac.init(keySpec)
byte[] result = mac.doFinal("foo".getBytes())
BASE64Encoder encoder = new BASE64Encoder()
System.out.println(encoder.encode(result))
生产:+3h2gpjf4xcynjCGU5lbdMBwGOc=
请注意,我sun.misc.BASE64Encoder为迅速在这里,但你应该不依赖于太阳的JRE。以base64编码器在下议院编解码器将是一个更好的选择,例如。
2. A小调的事情,但如果你正在寻找一个相当于HMAC(那么默认的Python库的MD5算法,所以你需要的HMACMD5算法在Java中。 这个我有这个确切的问题,并认为此答案这是有帮助的 CodeGo.net,但我错过了一个地方传递到HMAC()的一部分,并就下一个兔子洞。希望这个答案可以防止其他人做的未来。 例如在Python REPL>>>import hmac
>>>hmac.new("keyValueGoesHere", "secretMessageToHash").hexdigest()
'1a7bb3687962c9e26b2d4c2b833b2bf2'
这等效于import org.apache.commons.codec.binary.Hex
import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec
public class HashingUtility {
public static String HMAC_MD5_encode(String key, String message) throws Exception {
SecretKeySpec keySpec = new SecretKeySpec(
key.getBytes(),
"HmacMD5")
Mac mac = Mac.getInstance("HmacMD5")
mac.init(keySpec)
byte[] rawHmac = mac.doFinal(message.getBytes())
return Hex.encodeHexString(rawHmac)
}
}
请注意,在我的例子我在干什么。hexdigest相当于()