【问题标题】:How to pass a password with quotes and single quotes in terminal? [duplicate]如何在终端中传递带引号和单引号的密码? [复制]
【发布时间】:2015-04-13 21:03:31
【问题描述】:

我为我的 Android 应用程序创建了一个 .keystore,生成了一个随机密码。它在同一个密码中包含引号 (") 和单引号 ('),例如:xxxxxx"xxx!\x='x

我正在尝试使用 keytool 传递密码。如何传递密码?

keytool -list -storepass "<my_password>" -keystore my.keystore

并显示:

-bash: !\xx'x": 未找到事件

谢谢!

编辑 我尝试使用:

keytool -list -storepass xxxxxx\"xxx\!x=\'x -keystore my.keystore

keytool 错误:java.io.IOException: Keystore 被篡改,或 密码错误

【问题讨论】:

  • 为什么不生成不带 (") 引号的密码?这是你刚刚创建的吗?
  • @JaredBurrows 我创建了它。我绝对不会再使用 ( " , ' , \ )。
  • 好吧好吧。所以你可以创建一个新的。保密,注意安全。

标签: android bash shell apk keytool


【解决方案1】:

如果您不知道什么是历史扩展,不使用它,或者您不知道是否使用它,请将set +H 附加到您的.bashrc 以禁用它。这将阻止交互式 bash 会话与您原本放置良好的感叹号相混淆。

您也可以在提示符下运行 set +H 来为该会话禁用它:

$ echo "!foo"
bash: !foo: event not found

$ set +H

$ echo "!foo"
!foo

或者,您可以通过将感叹号放在单引号中来解决它:

$ echo "fo'o!ba\\r"
bash: !ba\\r: event not found

$ echo "fo'o"'!'"ba\\r"
fo'o!ba\r

这里按原样使用双引号字符串,但 ! 被替换为 "'!'",它关闭双引号,开始一个单引号段,添加 !,然后关闭单引号并打开一个再次双引号字符串。

【讨论】:

  • 非常感谢!我可以使用 echo "xxxxxx"xxx"'!'"\x='x" 并显示密码。但是然后我在 -storepass 中为 keytool 传递相同的内容,它继续显示相同的错误消息。也许 keytool 使用了一些奇怪的算法?
  • 您发布的内容似乎缺少引号,因此无法使用,并且您的编辑显示的错误消息与您之前的“未找到事件”明显不同,并表明您'重新使用错误的密码。您必须记住,非转义引号是 shell 语法并且不会传递给 keytool,因此如果您在运行 keytool 时输入foo"bar" 作为密码(而不是在启动 keytool 时),指定 -storepass foo"bar" 将不起作用(而是,你必须使用类似-storepass 'foo"bar"')
【解决方案2】:

我会将密码粘贴到变量中

pass='xxxxxx"xxx!\x='\''x'

'\'' 位是在 bash 中将单引号嵌入单引号字符串的一种方法。

然后你可以只使用双引号中的变量

cmd -p "$pass"

【讨论】:

    【解决方案3】:

    不幸的是我猜你必须转义特殊字符,像这样:

    xxxxxx\"xxx\\!xx\'x

    【讨论】:

    • 它不工作。我认为问题不仅在于引号,还在于 '!\x' 部分。
    • 我更正了 xxxxxx\"xxx\!xx\'x ...我们必须转义 !, ' 和 "
    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    相关资源
    最近更新 更多