[GH-ISSUE #192] 在加密情况下,是不是有字符限制,超过15个字符就失败了 #174

Closed
opened 2026-03-03 11:37:42 +03:00 by kerem · 15 comments
Owner

Originally created by @MoncozGC on GitHub (Apr 14, 2023).
Original GitHub issue: https://github.com/Finb/Bark/issues/192

rt,不清楚是这样的限制还是我配置的有问题。

Originally created by @MoncozGC on GitHub (Apr 14, 2023). Original GitHub issue: https://github.com/Finb/Bark/issues/192 rt,不清楚是这样的限制还是我配置的有问题。
kerem closed this issue 2026-03-03 11:37:43 +03:00
Author
Owner

@Finb commented on GitHub (Apr 14, 2023):

我测试几百个字符都是没问题的,可以给我一个测试用例我测试下

<!-- gh-comment-id:1508049691 --> @Finb commented on GitHub (Apr 14, 2023): 我测试几百个字符都是没问题的,可以给我一个测试用例我测试下
Author
Owner

@MoncozGC commented on GitHub (Apr 14, 2023):

我隐藏了bark key, 加密key和iv;
body中的message是通过参数传递的,这样应该不会有影响吧,我打印了json内容看着是没有问题的

 #`json='{
    "body": "'${message//,/\\,}'",
    "sound": "birdsong"
    }'


# OpenSSL 要求输入的 Key 和 IV 需使用十六进制编码。
key=$(printf $key | xxd -ps -c 200)
iv=$(printf $iv | xxd -ps -c 200)

ciphertext=$(echo -n $json | openssl enc -aes-128-cbc -K $key -iv $iv | base64)

# 控制台将打印 "voWZZZaTLNVOHwLC1JOyEdF55fOrIHAkuueEKYLqvI5Pn6MRywXd+3U1ocIomGNt"
#echo $ciphertext

# 密文可能有特殊字符,所以记得 URL 编码一下。
curl --data-urlencode "ciphertext=$ciphertext" --data-urlencode "iv=h5ZCDQbYctts8P4U" https://api.day.app/$deviceKey

我测试几百个字符都是没问题的,可以给我一个测试用例我测试下

<!-- gh-comment-id:1508062825 --> @MoncozGC commented on GitHub (Apr 14, 2023): 我隐藏了bark key, 加密key和iv; body中的message是通过参数传递的,这样应该不会有影响吧,我打印了json内容看着是没有问题的 ```shell #`json='{ "body": "'${message//,/\\,}'", "sound": "birdsong" }' # OpenSSL 要求输入的 Key 和 IV 需使用十六进制编码。 key=$(printf $key | xxd -ps -c 200) iv=$(printf $iv | xxd -ps -c 200) ciphertext=$(echo -n $json | openssl enc -aes-128-cbc -K $key -iv $iv | base64) # 控制台将打印 "voWZZZaTLNVOHwLC1JOyEdF55fOrIHAkuueEKYLqvI5Pn6MRywXd+3U1ocIomGNt" #echo $ciphertext # 密文可能有特殊字符,所以记得 URL 编码一下。 curl --data-urlencode "ciphertext=$ciphertext" --data-urlencode "iv=h5ZCDQbYctts8P4U" https://api.day.app/$deviceKey ``` > 我测试几百个字符都是没问题的,可以给我一个测试用例我测试下
Author
Owner

@Finb commented on GitHub (Apr 14, 2023):

把JSON打印一下,找个工具验证下JSON格式是否正确

<!-- gh-comment-id:1508065088 --> @Finb commented on GitHub (Apr 14, 2023): 把JSON打印一下,找个工具验证下JSON格式是否正确
Author
Owner

@MoncozGC commented on GitHub (Apr 14, 2023):

把JSON打印一下,找个工具验证下JSON格式是否正确

JSON字符串解析没有问题,应该还是字符的长度的问题。

这条JSON推送没问题
json='{"body": "test", "sound": "birdsong"}' 

这条JSON推送,APP就会显示Decryption Failed
json='{"body": "tes123123123123t", "sound": "birdsong"}'
<!-- gh-comment-id:1508085183 --> @MoncozGC commented on GitHub (Apr 14, 2023): > 把JSON打印一下,找个工具验证下JSON格式是否正确 JSON字符串解析没有问题,应该还是字符的长度的问题。 ```json 这条JSON推送没问题 json='{"body": "test", "sound": "birdsong"}' 这条JSON推送,APP就会显示Decryption Failed json='{"body": "tes123123123123t", "sound": "birdsong"}' ```
Author
Owner

@Finb commented on GitHub (Apr 14, 2023):

第二个json我这是可以正常发的
你提供一个完整的发送脚本发我吧,隐藏掉deviceKey,保留加密key或IV

<!-- gh-comment-id:1508090038 --> @Finb commented on GitHub (Apr 14, 2023): 第二个json我这是可以正常发的 你提供一个完整的发送脚本发我吧,隐藏掉deviceKey,保留加密key或IV
Author
Owner

@MoncozGC commented on GitHub (Apr 14, 2023):

好的

#!/usr/bin/env bash

# Documentation: https://bark.day.app/#/encryption

set -e

# push payload
#json='{"body": "tes123123123123t", "sound": "birdsong"}'
json='{"body": "test", "sound": "birdsong"}'

# 必须16位
key='3065296648851680'
# IV可以是随机生成的,但如果是随机的就需要放在 iv 参数里传递。
iv='h5ZCDQbYctts8P4U'

# OpenSSL 要求输入的 Key 和 IV 需使用十六进制编码。
key=$(printf $key | xxd -ps -c 200)
iv=$(printf $iv | xxd -ps -c 200)

ciphertext=$(echo -n $json | openssl enc -aes-128-cbc -K $key -iv $iv | base64)

# 控制台将打印 "Peo2gLPgWRfe/ZGZjL6r8H6fXFnQ4xG1paI7THxkh2+X3qCGLNJRW3IOMGuIx2bg"
echo $ciphertext

# 密文可能有特殊字符,所以记得 URL 编码一下。
curl --data-urlencode "ciphertext=$ciphertext" --data-urlencode "iv=h5ZCDQbYctts8P4U" https://api.day.app/$deviceKey
<!-- gh-comment-id:1508096865 --> @MoncozGC commented on GitHub (Apr 14, 2023): 好的 ```shell #!/usr/bin/env bash # Documentation: https://bark.day.app/#/encryption set -e # push payload #json='{"body": "tes123123123123t", "sound": "birdsong"}' json='{"body": "test", "sound": "birdsong"}' # 必须16位 key='3065296648851680' # IV可以是随机生成的,但如果是随机的就需要放在 iv 参数里传递。 iv='h5ZCDQbYctts8P4U' # OpenSSL 要求输入的 Key 和 IV 需使用十六进制编码。 key=$(printf $key | xxd -ps -c 200) iv=$(printf $iv | xxd -ps -c 200) ciphertext=$(echo -n $json | openssl enc -aes-128-cbc -K $key -iv $iv | base64) # 控制台将打印 "Peo2gLPgWRfe/ZGZjL6r8H6fXFnQ4xG1paI7THxkh2+X3qCGLNJRW3IOMGuIx2bg" echo $ciphertext # 密文可能有特殊字符,所以记得 URL 编码一下。 curl --data-urlencode "ciphertext=$ciphertext" --data-urlencode "iv=h5ZCDQbYctts8P4U" https://api.day.app/$deviceKey ```
Author
Owner

@Finb commented on GitHub (Apr 14, 2023):

测试没问题
第一个JSON,加密后的密文是 “10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MApY3dWO+jq4Q==”

<!-- gh-comment-id:1508102504 --> @Finb commented on GitHub (Apr 14, 2023): 测试没问题 第一个JSON,加密后的密文是 “10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MApY3dWO+jq4Q==”
Author
Owner

@MoncozGC commented on GitHub (Apr 14, 2023):

很奇怪,我的加密出来再某一个地方有空格

这是我的密文
10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MAp Y3dWO+jq4Q==

我测试了一下,在json字符串过长的时候就会多一个空格,这样就导致在解密的时候有问题,应该是这个问题导致的。

测试没问题 第一个JSON,加密后的密文是 “10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MApY3dWO+jq4Q==”

<!-- gh-comment-id:1508114995 --> @MoncozGC commented on GitHub (Apr 14, 2023): 很奇怪,我的加密出来再某一个地方有空格 ```text 这是我的密文 10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MAp Y3dWO+jq4Q== ``` 我测试了一下,在json字符串过长的时候就会多一个空格,这样就导致在解密的时候有问题,应该是这个问题导致的。 > 测试没问题 第一个JSON,加密后的密文是 “10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MApY3dWO+jq4Q==”
Author
Owner

@MoncozGC commented on GitHub (Apr 14, 2023):

我通过下面的方式解决了问题,我是在windows环境使用git bash 执行的,可能在base64命令执行的时候会输入换行符。
通过下面的命令删除换行符就可以了

ciphertext=$(echo -n "$json" | openssl enc -aes-128-cbc -K $key -iv $iv | base64 | tr -d '\n')
<!-- gh-comment-id:1508126223 --> @MoncozGC commented on GitHub (Apr 14, 2023): 我通过下面的方式解决了问题,我是在windows环境使用git bash 执行的,可能在base64命令执行的时候会输入换行符。 通过下面的命令删除换行符就可以了 ```shell ciphertext=$(echo -n "$json" | openssl enc -aes-128-cbc -K $key -iv $iv | base64 | tr -d '\n') ```
Author
Owner

@Finb commented on GitHub (Apr 14, 2023):

base64 出现换行符应该是不正常的

<!-- gh-comment-id:1508159469 --> @Finb commented on GitHub (Apr 14, 2023): base64 出现换行符应该是不正常的
Author
Owner

@MoncozGC commented on GitHub (Apr 14, 2023):

base64 出现换行符应该是不正常的

是的,可能是环境的问题吧,感谢帮助~

<!-- gh-comment-id:1508247475 --> @MoncozGC commented on GitHub (Apr 14, 2023): > base64 出现换行符应该是不正常的 是的,可能是环境的问题吧,感谢帮助~
Author
Owner

@rustle123 commented on GitHub (Aug 31, 2023):

很奇怪,我的加密出来再某一个地方有空格

这是我的密文
10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MAp Y3dWO+jq4Q==

我测试了一下,在json字符串过长的时候就会多一个空格,这样就导致在解密的时候有问题,应该是这个问题导致的。

测试没问题 第一个JSON,加密后的密文是 “10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MApY3dWO+jq4Q==”

我这边测试出来的结果也是这样,请问后来发现是哪里的问题了吗?我感觉我的环境没啥问题的..... @Finb @MoncozGC

我这边是这样的,第一个json可以正常接受,第二个就提示Decryption failed.....
json='{"body": "do", "sound": "birdsong"}'
json='{"title": "hell", "body": "do", "sound": "birdsong"}'

<!-- gh-comment-id:1700790046 --> @rustle123 commented on GitHub (Aug 31, 2023): > > 很奇怪,我的加密出来再某一个地方有空格 > > ``` > 这是我的密文 > 10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MAp Y3dWO+jq4Q== > ``` > > 我测试了一下,在json字符串过长的时候就会多一个空格,这样就导致在解密的时候有问题,应该是这个问题导致的。 > > > 测试没问题 第一个JSON,加密后的密文是 “10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MApY3dWO+jq4Q==” 我这边测试出来的结果也是这样,请问后来发现是哪里的问题了吗?我感觉我的环境没啥问题的..... @Finb @MoncozGC 我这边是这样的,第一个json可以正常接受,第二个就提示Decryption failed..... json='{"body": "do", "sound": "birdsong"}' json='{"title": "hell", "body": "do", "sound": "birdsong"}'
Author
Owner

@MoncozGC commented on GitHub (Aug 31, 2023):

我这边测试出来的结果也是这样,请问后来发现是哪里的问题了吗?我感觉我的环境没啥问题的..... @Finb @MoncozGC

我这边是这样的,第一个json可以正常接受,第二个就提示Decryption failed..... json='{"body": "do", "sound": "birdsong"}' json='{"title": "hell", "body": "do", "sound": "birdsong"}'

这是用的同一个KEY发送的消息嘛,我用了你的两条消息都可以正常发送出去。
我当时的问题是加密出来的密文再某一个地方有空格,利用这个命令解决的
ciphertext=$(echo -n "$json" | openssl enc -aes-128-cbc -K $key -iv $iv | base64 | tr -d '\n')

<!-- gh-comment-id:1701076295 --> @MoncozGC commented on GitHub (Aug 31, 2023): > 我这边测试出来的结果也是这样,请问后来发现是哪里的问题了吗?我感觉我的环境没啥问题的..... @Finb @MoncozGC > > 我这边是这样的,第一个json可以正常接受,第二个就提示Decryption failed..... json='{"body": "do", "sound": "birdsong"}' json='{"title": "hell", "body": "do", "sound": "birdsong"}' 这是用的同一个KEY发送的消息嘛,我用了你的两条消息都可以正常发送出去。 我当时的问题是加密出来的密文再某一个地方有空格,利用这个命令解决的 ciphertext=$(echo -n "$json" | openssl enc -aes-128-cbc -K $key -iv $iv | base64 | tr -d '\n')
Author
Owner

@rustle123 commented on GitHub (Aug 31, 2023):

很奇怪,我的加密出来再某一个地方有空格

这是我的密文
10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MAp Y3dWO+jq4Q==

我测试了一下,在json字符串过长的时候就会多一个空格,这样就导致在解密的时候有问题,应该是这个问题导致的。

测试没问题 第一个JSON,加密后的密文是 “10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MApY3dWO+jq4Q==”

我这边测试出来的结果也是这样,请问后来发现是哪里的问题了吗?我感觉我的环境没啥问题的..... @Finb @MoncozGC

我这边是这样的,第一个json可以正常接受,第二个就提示Decryption failed..... json='{"body": "do", "sound": "birdsong"}' json='{"title": "hell", "body": "do", "sound": "birdsong"}'

我这边测试出来的结果也是这样,请问后来发现是哪里的问题了吗?我感觉我的环境没啥问题的..... @Finb @MoncozGC
我这边是这样的,第一个json可以正常接受,第二个就提示Decryption failed..... json='{"body": "do", "sound": "birdsong"}' json='{"title": "hell", "body": "do", "sound": "birdsong"}'

这是用的同一个KEY发送的消息嘛,我用了你的两条消息都可以正常发送出去。 我当时的问题是加密出来的密文再某一个地方有空格,利用这个命令解决的 ciphertext=$(echo -n "$json" | openssl enc -aes-128-cbc -K $key -iv $iv | base64 | tr -d '\n')

是的,我找到了解决办法,观察bash脚本加密后的输出,内容较长的时候,加密内容就会有空格,比如:

json='{"body": "doooooooooooooooooooooooooooooooooooooooo", "sound": "birdsong"}'

此时,ciphertxt就是:

mLjVRnECW5kGUoi7AeLxG3Fqj+NK/CXmylF1Z7O29eOIufl1foo5Aacv2TmpQ65BXxrUqyIFo8m+ MiNPxhc1rh7EjXARTTTVMsea0iHR9hI=

中间是有空格的,使用tr -d ' '命令把空格删除在发送,就可以了

感谢!

<!-- gh-comment-id:1701079327 --> @rustle123 commented on GitHub (Aug 31, 2023): > > > > > 很奇怪,我的加密出来再某一个地方有空格 > > ``` > > 这是我的密文 > > 10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MAp Y3dWO+jq4Q== > > ``` > > > > > > > > > > > > > > > > > > > > > > > > 我测试了一下,在json字符串过长的时候就会多一个空格,这样就导致在解密的时候有问题,应该是这个问题导致的。 > > > 测试没问题 第一个JSON,加密后的密文是 “10tJijOcbS5126u7Wg4Ct+dQzUfJIKDI1BqTvspzmFgIYECwhcb1R3wVk1pOJFM6ZpKuVzHG0MApY3dWO+jq4Q==” > > 我这边测试出来的结果也是这样,请问后来发现是哪里的问题了吗?我感觉我的环境没啥问题的..... @Finb @MoncozGC > > 我这边是这样的,第一个json可以正常接受,第二个就提示Decryption failed..... json='{"body": "do", "sound": "birdsong"}' json='{"title": "hell", "body": "do", "sound": "birdsong"}' > > 我这边测试出来的结果也是这样,请问后来发现是哪里的问题了吗?我感觉我的环境没啥问题的..... @Finb @MoncozGC > > 我这边是这样的,第一个json可以正常接受,第二个就提示Decryption failed..... json='{"body": "do", "sound": "birdsong"}' json='{"title": "hell", "body": "do", "sound": "birdsong"}' > > 这是用的同一个KEY发送的消息嘛,我用了你的两条消息都可以正常发送出去。 我当时的问题是加密出来的密文再某一个地方有空格,利用这个命令解决的 ciphertext=$(echo -n "$json" | openssl enc -aes-128-cbc -K $key -iv $iv | base64 | tr -d '\n') 是的,我找到了解决办法,观察bash脚本加密后的输出,内容较长的时候,加密内容就会有空格,比如: ``` json='{"body": "doooooooooooooooooooooooooooooooooooooooo", "sound": "birdsong"}' ``` 此时,ciphertxt就是: ```txt mLjVRnECW5kGUoi7AeLxG3Fqj+NK/CXmylF1Z7O29eOIufl1foo5Aacv2TmpQ65BXxrUqyIFo8m+ MiNPxhc1rh7EjXARTTTVMsea0iHR9hI= ``` 中间是有空格的,使用`tr -d ' '`命令把空格删除在发送,就可以了 感谢!
Author
Owner

@cfbsks commented on GitHub (Oct 2, 2023):

关于长json导致未知的空格问题, 通过man base64可以得到问题原因,

-w, --wrap=COLS
              wrap encoded lines after COLS character (default 76).  Use 0 to disable line wrapping

即为了方便屏幕阅读, base64命令默认启用了76字符后换行, 也就产生了空格符.
要解决此问题, 可以添加 -w 0 选项, 取消默认换行操作.
ciphertext=$(echo -n "$json" | openssl enc -aes-128-cbc -K $key -iv $iv | base64 -w 0)

作者的示例加密脚本中可以作出修改(包括https://bark.day.app/#/encryption)

<!-- gh-comment-id:1743431502 --> @cfbsks commented on GitHub (Oct 2, 2023): 关于长json导致未知的空格问题, 通过man base64可以得到问题原因, ``` -w, --wrap=COLS wrap encoded lines after COLS character (default 76). Use 0 to disable line wrapping ``` 即为了方便屏幕阅读, base64命令默认启用了76字符后换行, 也就产生了空格符. 要解决此问题, 可以添加 `-w 0` 选项, 取消默认换行操作. `ciphertext=$(echo -n "$json" | openssl enc -aes-128-cbc -K $key -iv $iv | base64 -w 0)` > 作者的示例加密脚本中可以作出修改(包括`https://bark.day.app/#/encryption`)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/Bark#174
No description provided.