我有一个签名的应用程序和几个密钥库文件.我想更新应用程序,所以我需要找出使用了哪一个密钥.
我如何匹配最初使用哪个密钥库来对我的机器上的各种密钥库进行签名?
我在github上下载了一个Android应用程序的zip文件,我正在尝试运行它,但是我收到了一条包含此消息的对话框
app-release-unsigned.apk is not signed. Please configure the signing information for the selected flavor using the Project Structure dialog.
Run Code Online (Sandbox Code Playgroud)
我正在使用Android Studio.我应该做些什么?
我正在努力更好地解决公钥/私钥的工作方式.我知道发件人可以使用他/她的私钥向文档添加数字签名,以基本上获取文档的哈希值,但我不明白的是如何使用公钥来验证签名.
我的理解是公钥加密,私钥解密......任何人都可以帮我理解吗?
pki digital-signature public-key-encryption public-key private-key
我试图了解Java java.security.Signature类的功能.如果我计算SHA1消息摘要,然后使用RSA加密该摘要,我得到一个不同的结果,要求Signature类签署相同的东西:
// Generate new key
KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
String plaintext = "This is the message being signed";
// Compute signature
Signature instance = Signature.getInstance("SHA1withRSA");
instance.initSign(privateKey);
instance.update((plaintext).getBytes());
byte[] signature = instance.sign();
// Compute digest
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
byte[] digest = sha1.digest((plaintext).getBytes());
// Encrypt digest
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] cipherText = cipher.doFinal(digest);
// Display results
System.out.println("Input data: " + plaintext);
System.out.println("Digest: " + bytes2String(digest));
System.out.println("Cipher text: " + bytes2String(cipherText)); …
Run Code Online (Sandbox Code Playgroud) 在为我们的网络应用设计API时,我们将使用其子域作为"用户名"并生成API密钥/共享密钥.首先,可以使用子域作为用户名吗?我没有看到生成另一个密钥的好处.
不同的API似乎做两件事之一:
在每个请求中,用户名都设置为子域和API密钥的密码.由于我们使用SSL,因此这应该是安全的欺骗.
着名的API:Google Checkout,Freshbooks,GitHub,Zendesk
通常通过对键/值对进行排序并使用具有共享密钥的HMAC-SHA1来生成签名来实现.然后,签名随请求一起发送,并在另一端验证.
着名的API:Google Checkout,亚马逊AWS
PS:毫无疑问,Google Checkout支持两者
编辑:只需阅读OAuth 2正在删除签名,转而通过SSL发送用户名/密码.
任何人都有关于选择什么的意见:SSL vs Signature?
我正在尝试使用HMAC-SHA256算法创建签名,这是我的代码.我正在使用US ASCII编码.
final Charset asciiCs = Charset.forName("US-ASCII");
final Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
final SecretKeySpec secret_key = new javax.crypto.spec.SecretKeySpec(asciiCs.encode("key").array(), "HmacSHA256");
final byte[] mac_data = sha256_HMAC.doFinal(asciiCs.encode("The quick brown fox jumps over the lazy dog").array());
String result = "";
for (final byte element : mac_data)
{
result += Integer.toString((element & 0xff) + 0x100, 16).substring(1);
}
System.out.println("Result:[" + result + "]");
Run Code Online (Sandbox Code Playgroud)
我从上面的代码得到的结果是:
f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
Run Code Online (Sandbox Code Playgroud)
这与wiki中显示的相同
HMAC_SHA256("key", "The quick brown fox jumps over the lazy dog") = 0x f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8
Run Code Online (Sandbox Code Playgroud)
除了为0x
.
我正在寻找想法/评论,如果我做的一切正确或可能是我可以改进我的代码.
我有一个识别用户的数字证书.我需要用它来数字签署pdf文件.
有没有人有一个不使用第三方组件的例子?我需要完成这项工作,但要完全理解事情是如何完成的将是很好的.
C#示例请:)
我一直在谷歌的数字签名和数字证书(非对称加密)之间的区别似乎是相同的.我想澄清它们是否相同?非常感谢!!!
我想知道RSA签名的长度是多少?是否总是与RSA密钥大小相同,如果密钥大小为1024,则RSA签名为128字节,如果密钥大小为512位,则RSA签名为64字节?什么是RSA模数?那么RSA-sha1是什么意思?任何指针都非常感激.
想知道是否有人知道任何免费(试用)时间戳服务器服务.我想在itext中测试时间戳功能.就像我使用Start Com class 1作为免费CA进行测试一样.希望我说清楚.希望有人知道一个地方谢谢
android ×2
cryptography ×2
java ×2
rsa ×2
security ×2
api ×1
c# ×1
encryption ×1
github ×1
hmac ×1
pdf ×1
pki ×1
private-key ×1
public-key ×1
rest ×1
sha1 ×1