分享一个 Java 中非常糟糕的 API 设计

查看 147|回复 16
orangie   
@0xD800 按照文档标准设计的应该用字符 password ,不会用字节 key 。PBKDF2 这个名字就是 Password-Based Key Derivation Function 。想要用字节的话,合理的方式不是换个库,而是换个加密方案。如果非要用 PBKDF 系列,那么可以自己把第三方的类库复制一份魔改,注意 license 。
InkStone   
这是 password 不是 crypto key 。你传个二进制数据进去本来就不符合用法……
你要传二进制用普通的 hmac 别用 pbkdf_hmac 啊
gadfly3173   
我不懂 python 也不懂 c ,但是按照 python 源码里这个实现,char *也不能用来放非字符吧?
https://github.com/python/cpython/blob/8b56d82c59c2983b4292a7f506982f2cab352bb2/Modules/_hashopenssl.c#L1323C59-L1323C67
0xD800
OP
  
@orangie 真的非常感激你的回复,因为这个是解密微信的本地聊天记录数据库,所以没办法换加密方案,只能换个库或者自己实现这个 SPI 了。
orangie   
@gadfly3173 C 语言字符和字节的没有区别,C 的 char 完全就是其它语言中的 byte 而没有真正的字符 char 。C 里 char 存的就是字节,完全不限制字符是否合法。
0xD800
OP
  
@gadfly3173 感谢回复,python 的 hashlib 中 password 是直接传入 bytes 的,不是传入 string ,因此没有转换的问题。而 java 是传入 UTF8 编码的字符数组,所以出现了问题,JAVA 底层还是把 char 转成了 byte[],我觉得这个设计不太合理,应该支持直接传入 byte[]好一些
0xD800
OP
  
@InkStone 微信用的是这个 我也没办法. 我要解密就必须得用 单纯吐槽下这个 API 而已
您需要登录后才可以回帖 登录 | 立即注册

返回顶部