sha1sum输出实际 sha 的十六进制编码格式。我想看到一个 base64 编码的变体。可能有一些命令输出我可以通过管道echo -n "message" | <some command> | base64传输的二进制版本,就像这样:或者如果它直接输出它也很好。
我在 bash 变量中有两块 base64 数据。base64 数据中通常的换行符已被空格替换,变量基本上是一个非常长的单行字符串。
我可以解码变量中包含的两块 base64 数据,但在尝试执行此操作时遇到了一些细微差别。我想了解我是否正确地处理了这个问题,或者是否有更好的方法来解码不包含换行符的 base64 数据。这是我所拥有的:
第一个块是 350 个字符,我可以像这样成功解码它:
echo ${DATA::350} | openssl base64 -d | wc -c
256
Run Code Online (Sandbox Code Playgroud)
第二个块是 5745 个字符,但上面的命令没有产生预期的结果。IE:
$ echo {DATA:350} | openssl base64 -d | wc -c
432
Run Code Online (Sandbox Code Playgroud)
但是,如果我将换行符放回去,它会起作用:
$ echo ${DATA:350} | tr ' ' "\n" | openssl base64 -d | wc -c
4240
Run Code Online (Sandbox Code Playgroud)
我希望第一个块足够小,可以避免一些行长度问题,并且它似乎是所使用的 base64 解码器的一个功能(两个常见的base64和openssl base64,表现不同)。
的base64解码器(代替openssl base64)停止在第一无效字符(空格),并因此只是解码而输出的OpenSSL 432个字符(9“线”)的第一个“行”(48个字节的输出数据)。该base64命令有一个选项可以忽略垃圾,所以这是有效的:
$ echo ${DATA:350} | base64 -d …Run Code Online (Sandbox Code Playgroud) 有谁知道为什么会发生这种情况以及如何解决它?
me@box:~$ echo "eyJmb28iOiJiYXIiLCJiYXoiOiJiYXQifQ" | base64 -di
{"foo":"bar","baz":"bat"}base64: invalid input
Run Code Online (Sandbox Code Playgroud) 我使用的是 Mac。在 Bash 中,我尝试解码 Base64 字符串,然后尝试打印十六进制值。我正在使用base64 -d命令,然后将其分配给变量。
myText='YYN29+2wV2XRAHymIyhgytWuqY4atgHnIUFfXA7FPOA='
myTextBytes=$(echo -n "$myText" | base64 --decode)
echo -n $myTextBytes | xxd -p -c 99999
Run Code Online (Sandbox Code Playgroud)
上述脚本的输出是:
618376f7edb05765d17ca6232860cad5aea98e1ab601e721415f5c0ec53ce0
但是,如果我直接运行以下命令:
echo -n "$myText" | base64 --decode | xxd -p -c 100000
Run Code Online (Sandbox Code Playgroud)
我得到:
618376f7edb05765d1 00 7ca6232860cad5aea98e1ab601e721415f5c0ec53ce0
我什至尝试使用openssl enc -base64并得到相同的结果。也就是说,00在分配给变量时被删除。00当我将它分配给变量时如何保留它?
我正在使用带有 bash shell 的 CentOS 7。我认为对二进制文件进行 base64 编码会很简单
[rails@server lib]$ cat mybinary.file | base64 > /tmp/output.base64
Run Code Online (Sandbox Code Playgroud)
但是,当我查看文件长度时,我注意到它不是四的倍数
[rails@server lib]$ ls -al /tmp/output.base64
-rw-rw-r-- 1 rails rails 92935 May 31 15:50 /tmp/output.base64
Run Code Online (Sandbox Code Playgroud)
我不知道我所做的是否有效,但是当我尝试使用 JS 库解码文件时,我收到一个错误,抱怨字符串长度不是四的倍数,所以我想知道我上面所做的是否正确,或者是否有其他方法可以做到。
在 Linux 上,我有文本文件,每个文件包含 1 或 2 个 base64 代码块。以下是文件的一部分和 1 个 base64 块。
内容传输编码:base64
RGVhciBMdWlzLA0KICANCkdvb2QgbW9uaW5nIQ0KT3VyIEJhbmsgYWNjb3VudCBpcyB1bmRlcmdvaW5nIGF1ZGl0IGZvciB0aGUgZmlzY2FsIHllYXIgYXMgcmVxdWlyZWQgYnkgdGhlIGNoaW5hIGZvcmVpZ24gY3VycmVuY3kgY29udHJvbCBwb2xpY3kgYW5kIHRoZSBhY2NvdW50IHdpbGwgbm90IGJlIGF2YWlsYWJsZSB1bnRpbCB0aGUgQ2hpbmVzZSB0YXggYnVyZWF1cyBhcmUgc 2F0aXNmaWVkIHRoYXQgYWxsIGFwcGxpY2FibGUgdGF4ZXMgaGF2ZSBiZWVuIHBhaWQgdXAuIFBsZWFzZSBob2xkIHBheW1lbnQgc28gaSBjYW4gZnVybmlzaCB5b3Ugd2l0aCBvdXIgcmV2aXNlZCBiYW5raW5nIGluZm9ybWF0aW9uLiAgDQoNCiAgDQpCZXN0IHJlZ2FyZHMNCiANCkRhdmlk
-------=_Part_143209_644876817.1451544132767--
我可以使用哪个命令从文件中提取第一个 base64?
我的目标是将输出解码为可读
示例文件解码命令:https : //superuser.com/a/663397
示例短语解码命令:https : //askubuntu.com/a/178546
我不知道如何仅提取代码的 base64 部分,或者它是否包含两个 base64,仅提取第一个。我可能会使用sed或awk,但我不知道如何假设我会查找:
修剪空行,我有 base64 但是如果有 2 个 base64 部分呢?我想要第一个。
我编写了一个简短的 shell 脚本,它只setfattr是以稍微方便的形式包装,用于设置与自由文本注释相对应的扩展属性:
#!/bin/sh
test "$2" && setfattr -n user.xdg.comment -v "$2" "$1"
getfattr -d -m '^user.xdg.comment$' "$1"
Run Code Online (Sandbox Code Playgroud)
将 US ASCII 注释存储为 xattrs,这很有效。但是,如果我尝试设置包含非 US ASCII 字符的注释,它会返回似乎是 Base64 编码的数据:
$ touch xyz
$ set-comment xyz åäöåä
# file: xyz
user.xdg.comment=0sw6XDpMO2w6XDpA==
$
Run Code Online (Sandbox Code Playgroud)
但这不仅仅是 Base64:
$ printf "0sw6XDpMO2w6XDpA==" | \base64 --decode
??:\:L;l:\:@base64: invalid input
$
Run Code Online (Sandbox Code Playgroud)
大多数时候,我得到的只是看起来随机的垃圾。有时,像这样,Base64 解码器会向我抛出“无效输入”。
这个字符串是什么?它与原始输入值的关系是什么?我如何从什么getfattr给我回到原始输入值(例如åäöåä在这种情况下)?
setfattr --version在我的系统上以setfattr 2.4.46. 我正在运行 Debian Wheezy 打包的版本。在不太可能发生的情况下,我在库存 Wheezy 内核上运行 ZFS On Linux 0.6.3(也看到了与 …
我有一个 base64 编码的文件名列表,格式为{base64-encoded part here}_2015-11-12.pdf. 我正在尝试解码该文件列表并将其作为另一个列表在命令行上返回,以换行符分隔。这是我现在正在尝试的:
find . -name "*_*" -printf "%f\0" | sed 's/_....-..-..\.pdf//g' | xargs -0 -i echo "{}" | base64 -d
Run Code Online (Sandbox Code Playgroud)
我想我在这里做的是。. .
_2015-11-12.pdf文件名的一部分)其结果显然是所有 base64 解码文件名的大字符串,每个名称由一个空字符分隔,整个字符串后跟一个换行符。该期望的结果将是对自身一行每个单独的解码文件名。
我尝试了各种技巧来尝试解决这个问题,但我还没有找到任何有效的方法。我试过... | base64 -d | echo,... | base64 -d && echo等,试图在沿途的各个点插入换行符。似乎到值结束时| base64 -d,它们都作为单个字符串同时处理。我试图找到一种方法将每个值base64 -d一次发送给一个,而不是作为文件名的整体列表。
我们有一个存储密码和其他用户数据的 LDAP 服务器。
尽管服务器不用于客户端计算机的身份验证,但仅用于客户端应用程序的身份验证。
所以用户在他们的客户端本地更改他们的密码。
只要我们使用 crypt,我就可以在 LDAP 中将 linux 哈希存储为 {CRYPT}$hash 并且它运行良好。
现在密码存储为加盐的 sha512 哈希值
,/etc/shadow 中的密码格式如下:
printf( "$6$%s$%s", $salt, $hash )
Run Code Online (Sandbox Code Playgroud)
$salt 似乎只是一个 ASCII 字符串,
我认为 $hash 是 $plainPW 和 $salt 串联的 sha512 摘要的 base64 编码结果,但我不确定。
LDAP 存储密码哈希是这样的:
printf( "{SSHA512}%s", $_96byteString )
Run Code Online (Sandbox Code Playgroud)
其中 $_96byteString 是 $saltedPWhash 和 $salt 的 512 位连接的 base64 编码结果
我试图对 $hash 进行 base64_decode,附加 $salt,base64_encode 结果并将其存储为上述 LDAP 格式的 $_96byteString。
唉 LDAP 无法通过此验证,一个简单的 ldapbind 就失败了。
有人知道如何转换 linux sha512 哈希值以便 LDAP 服务器接受它为有效吗?
我发现 linux crypt 使用与标准 mime …