gpt4 book ai didi

android - Base64特殊字符新建文件

转载 作者:行者123 更新时间:2023-11-29 15:58:04 24 4
gpt4 key购买 nike

我在 Android 中工作,正在开发一个应用程序,我在其中将文件上传到 Dropbox。因为我不希望看到这些文件的标题,所以我正在加密它们并将结果编码为字节数组。问题是当你使用句子时:

String fileNameEncrypted = Base64.encodeToString(encrypted, Base64.DEFAULT);
File file = new File(mDirectoryPath + "/" + fileNameEncrypted);

字符串“fileNameEncrypted”包含正斜杠和反斜杠以及文件名不允许的其他字符。此外,正斜杠会与子文件夹混淆。

我该如何解决这个问题?

PS:我的目标是无法在 Dropbox 应用程序中读取文件名。

最佳答案

[根据评论编辑整条消息]

因为 base64 编码使用特殊字符 (/) 和小写/大写字符,它似乎不太符合某些操作系统(如 Windows)的文件名。其中文件“aaa.txt”等于“AAA.txt”。

即使是 base64 的安全模式也使用小写和大写字符集。

ASCII 十六进制格式 (base16) 为存储字节数组提供了更兼容的字符集 0-9 A-F

the char 'A' = 0x41 in base16. You can wrote this as "41"

一个更完整的例子

"test.txt" can be translate to : 746573742E747874

如果您确实需要隐藏名称,您可以将编码与散列函数结合起来。因为 hash 是一种单向函数,你肯定会隐藏文件名,但你无法从中恢复真实名称。

如果您需要双向函数,您可以使用简单的加密方法,例如带有内部 key 的 aes

您可以使用 Guava 库对 base16 或 base32 执行转换,它们具有比 base64 for windows 更兼容的字符集。

byte[] encrypted = "test.txt".getBytes();
BaseEncoding encoder = BaseEncoding.base16().lowerCase();
String newFilename = encoder.encode(encrypted);

如果你想使用 base32 只需更改编码器。

关于android - Base64特殊字符新建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26735493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com