问题标签 [base32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - bash 中 printf 的默认 FORMAT 字符串是什么?
我正在尝试编写一个脚本来从提供的 ByteString 值中计算 base32 字符串,这些 ByteString 值作为键值对获得。ByteString 使用八进制转义序列和反斜杠转义序列。
考虑这个脚本:
我从中得到这个输出:
好的,那为什么我不只使用第一个结果,如果这似乎有效呢?
好吧,一个原因是我猜printf
不应该在没有FORMAT
字符串的情况下使用,因为应该有一些FORMAT
字符串printf
似乎默认使用(?)并且确实完成了我想要的?另一个原因是我有其他 ByteStrings,只有在我没有提供任何FORMAT
字符串 ( printf: ...: invalid format character
) 时才会出现错误,我认为当 ByteString 中有百分比字符时会发生这种情况,但我目前不确定,我没有示例不幸的是,它重现了这一点。所以我必须提供一个 FORMAT 字符串才能安全,对吧?但是正如你所看到的,当我尝试其他一些 FORMAT 字符串时,我得到了这个示例的错误结果!?!?
因此,如果有一个FORMAT
字符串适用于任何情况,那么我可以只使用这个,但到目前为止我没有找到任何默认值?
那么FORMAT
printf bash 内置函数的默认值是什么?
编辑我的问题的标题是详细回答的内容,因此首先感谢您。我已经学会了仔细检查概要,所以我可以自己弄清楚。问题有点复杂,因为我将八进制转义和反斜杠转义混合在一起。但是,如果我在某处使用双引号来自动插入 ByteString,那么这将插入不正确的八进制值,因为它只会转义三个数字中的第一个。所以双引号内的两个字符或字节"\363\""
会变成363"
所以我会得到它的 4 个字符/字节 3,6,3 和一个双引号,而不是八进制值 363 后跟双引号的字符!所以我想我的问题(现在我对 printf 有了更多的了解,并且上游推出了非标准的 ByteStrings)现在哪个是最好的/故障安全策略?以某种方式首先转换/转换八进制转义序列是否有意义?然后让 bash (我假设是 bash 在双引号 "" 之间进行插值?)剩余反斜杠的插值转义?或者我将如何分两步做到这一点?到目前为止,我在脚本中使用 printf '%s' 或 '%b' 尝试的策略最终没有得到锻炼,我现在不知道如何使它工作。
所以总结一下,我猜这里正确的策略是通过用相应的字符替换八进制转义符来减少值,或者在第一步中可能使用标准反斜杠转义符,这样结果可以在放置时被 bash 本身进一步内插双引号之间?这是正确的吗?如果是,如何做到这一点?
EDIT2 正如 Aaron 在评论中所建议的,我试图提出一个解决方案,即使用printf
FORMAT
字符串%b
将八进制转义序列转换为字符,然后在该步骤之后立即对结果进行转换,将所有出现的 替换\"
为一个双引号"
。
这似乎有效,因为我得到了在这种情况下正确的结果。
我希望这在每种情况下都能产生正确的结果......
python - 是什么让重复的 base64 和 base36 编码如此缓慢?以及如何使它更快?
我正在尝试一些不同的编码,当我尝试在 base64/base32 中重复编码一些文本(使用哪个取决于半随机布尔列表)时,我注意到它非常慢,我不明白,因为我认为他们特别快。我真的不明白为什么它这么慢,如果你能帮助我会很酷。
这是相关代码的一部分:
python - Cannot find any information on 9-digit decimal TOTP key
Long story short, I'm trying to create a front-end for a 2FA app in Python and I encountered something strange.
Typical TOTP keys are base-32 numbers with 16 or 32 digits, but one of the accounts I was testing instead has a 9-digit decimal key (for example 091827364
).
On an authenticator app, this behaves just like any other 2FA code, but none of the libraries I've seen in Python support it - they simply use the base64.b32decode()
function to extract the bytes from the key - but base-32 does not include 1, 8 & 9 which are present in my key, and trying to use it throws an error.
I've thought this integer (at least I assume that's how it's treated) simply gets converted to base-32 before being passed into the hashing program, but even after some trial-and-error I couldn't replicate the 2FA codes I got on my phone app.
There must be some sort of conversion algorithm I'm not aware of. Is there a specific name for this 9-digit key? I've tried searching for different types of TOTP keys, but the only things that ever came up were useless "TOTP vs HOTP" tech blogs...
hamming-code - 包含前向纠错 (FEC) 的 base32?
我正在尝试找到(或一起使用)一种加密文本的方法,以便输出是 base32 编码并通过前向纠错保护以防止丢失字符。
有一些base32
输出,比如NBSWY3DPEB3W64TMMQXAU===
我想传输它,即使NBS_Y3D_EB3W_TMMQXAU===
收到(“_”=缺失字符)或NISWY3DZEB3W6WTMMQXQU===
收到(错误字符)我想要一个正确的 de-base32
然后我可以通过管道进行解密。
详细地:
这是纯粹假设的情况,在这种情况下,我必须通过电话、短波或任何其他语音文本或莫尔斯信道传输编码消息。即没有可以处理> 5位文本的“数字”。另一方面,人类将拾取并转录消息,然后将其输入计算机进行解密。
我已经尝试过openssl enc -e -aes256 -k "12345" -nosalt -pbkdf2|base32
(-nosalt
只是为了重复尝试的人眼验证),但没有任何 FEC。
将openssl
-output 输入某些 FEC 工具(redupe
, fecsum
, par2
),然后base32
ing 结果会产生不适用的 FEC,因为 base32 不希望丢失任何字符。
我知道的 FECing 工具的输出不会产生 base32 输出。我站在这里,基本上是在寻找一个通过包含的 FEC 机制(LDPC、汉明码等)强化的 base32 实现。
有任何想法吗?