Android N提供了新的apk签名方案v2,如何检查特定的apk是否使用该新签名进行签名?
谢谢
我过去在SML做过一些工作,但现在我开始涉及更有趣的部分.
使用该abstype...with...end构造,我可以制作东西,但隐藏其实现细节.我还可以创建我想要制作的东西的签名,并使用:>运算符来构建一个遵循该签名的结构,以保持隐藏实现细节.
签名/结构不仅仅是一种更通用的弃用版本吗?对于签名/结构我不能做的弃用,我该怎么办?为什么我要使用abstype?
在此先感谢您的帮助!
举个例子:
signature SET = sig
type set
val empty: set
val insert: int * set -> set
val member: int * set -> bool
end
structure Set :> SET = struct
type set = int list
val empty = []
fun insert(x, s) = x::s
fun member(x, []) = false
| member(x, h::t) = (x = h) orelse member(x, t)
end
Run Code Online (Sandbox Code Playgroud)
似乎至少和...一样强大
abstype AbsSet = absset of int list with
val empty …Run Code Online (Sandbox Code Playgroud) 正如我们所做的那样,当它处于开发模式(构建)时,我有一个由debug.keystore(默认情况下)签名的应用程序.当它投入生产时,我们用我们的私钥签名.有没有办法在运行时确定当前包是用debug.keystore签名的(处于开发模式)还是用我们的私钥签名(处于生产模式).
我尝试过类似的东西
PackageManager packageManager = getPackageManager();
try {
Signature[] signs = packageManager.getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).signatures;
for (Signature signature : signs) {
Log.d(TAG, "sign = " + signature.toCharsString());
}
} catch (NameNotFoundException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
我不知道下一步该做什么?这是正确的做法吗?如何获得类似的debug.keystore签名?
我知道存在MD5指纹,keytool -list -keystore ~/.android/debug.keystore但在Signature类中没有"md5指纹"式方法.我想这样做是因为MapView Key,Logging,LicenseChecker和类似的东西.
在签署SAML响应时,还应该签名断言:
A)生成没有断言签名的响应签名.然后在生成两个签名后注入Assertion签名.
B)生成断言签名并在生成响应签名时包含它.
C)其他的东西.?
〜提前致谢!
对于亚马逊服务(S3,EC2,SimpleDB的)所有操作您需要签署与HMAC-SHA-1签名(所有resquest http://en.wikipedia.org/wiki/HMAC,http://docs.amazonwebservices.com /AWSFWS/latest/DeveloperGuide/index.html?SummaryOfAuthentication.html).
我在asp.net后端工作,没有问题.问题出在iPhone应用程序中.iPhone开发人员说,没有办法使用HMAC-SHA-1编码,他也没有办法实现自己的算法.作为程序员,我无法理解为什么会出现问题.
所以我想知道iPhone开发者是对的吗?
我从来没有为iPhone编码,所以我甚至没有在哪里搜索这样的信息.
我想从一个DLL调用一个方法,但我没有源文件头文件.我试图使用dumpbin/exports来查看方法的名称,但我可以找到方法签名?
有没有办法调用这种方法?
谢谢,
我正在尝试使用PEM(X.509)证书(存储在磁盘上的privateKey.pem文件中)来签署通过Java中的套接字发送的消息,但是在找到一个接近的示例时遇到了很多麻烦.我通常是一个C++人,他只是在帮助这个项目,所以我把它们整合到代码中有点困难,因为我不熟悉API.
不幸的是,我只限于Java(1.6.0 Update 16)标准的方法,所以虽然我发现了一个使用BouncyCastle的PEMReader的类似例子,但它对这个特定的项目没有多大帮助.
我的privateKey.pem密钥是passphrase protected,格式为:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED DEK-Info:
DES-EDE3-CBC,63A862F284B1280B
[...]
tsjQI4H8lhOBuk+NelHu7h2+uqbBQzwkPoA8IqbPXUz+B/MAGhoTGl4AKPjfm9gu
OqEorRU2vGiSaUPgDaRhdPKK0stxMxbByUi8xQ2156d/Ipk2IPLSEZDXONrB/4O5
[...]
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
它们是使用OpenSSL生成的:
openssl.exe genrsa -out private_key.pem 4096
Run Code Online (Sandbox Code Playgroud)
我无法在运行之前将此密钥转换为DER或其他格式,所需的任何转换都需要在代码内部完成,因为密钥需要易于更换且格式仍为PEM.
我听过各种各样的事情,我并不完全确定,并且希望这里的集体思想可以帮助将各个部分拉到一起.
我听说它说PEM证书需要Base64解码才能将其转换为可以使用的DER证书.我有一个名为MiGBase64的Base64解码工具,但我不完全确定如何/何时需要解码.
我已经迷失在Java API文档中,试图追踪存在的15种不同类型的Keys,KeyStores,KeyGenerators,Certificates等,但我对它们中的任何一种都不熟悉,无法正确识别我需要的使用,以及如何一起使用它们.
基本算法看起来很简单,这就是为什么我无法编写同样简单的实现特别令人沮丧的原因:
1)从文件中读取privateKey.pem
2)将私钥加载到XXX类中,使用密码短语解密密钥
3)使用带有Signature类的密钥对象对消息进行签名
非常感谢帮助,特别是示例代码.我一直在努力寻找这个问题的有用示例,因为大多数"关闭"示例都是使用BouncyCastle生成新密钥,或者只是使用不适用于此处的不同形式的密钥/类.
这似乎是一个非常简单的问题,但它让我发疯,任何非常简单的答案?
我已经使用Android的In-App Billing实现了一个测试应用.我在Security.java文件中填写了我的公钥.一切正常,但当我提交付款时,应用程序崩溃了.我在LogCat中收到一条错误,指出"签名验证失败",这对应于这段代码:
if (!sig.verify(Base64.decode(signature))) {
Log.e(TAG, "Signature verification failed.");
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果我将该位更改为true而不是返回false,那么一切正常 - 我可以提交付款并安全返回应用程序 - 但我假设其他错误,因为我可能应该更改它以返回true.
关于可能导致这种情况的任何想法?
我有一个令牌,一个包含公钥的文件,我想验证签名.我试图基于此验证签名.
但是,decodingCrypto和decodingSignature不匹配.
这是我的代码:
public static string Decode(string token, string key, bool verify)
{
var parts = token.Split('.');
var header = parts[0];
var payload = parts[1];
byte[] crypto = Base64UrlDecode(parts[2]);
var headerJson = Encoding.UTF8.GetString(Base64UrlDecode(header));
var headerData = JObject.Parse(headerJson);
var payloadJson = Encoding.UTF8.GetString(Base64UrlDecode(payload));
var payloadData = JObject.Parse(payloadJson);
if (verify)
{
var bytesToSign = Encoding.UTF8.GetBytes(string.Concat(header, ".", payload));
var keyBytes = Encoding.UTF8.GetBytes(key);
var algorithm = (string)headerData["alg"];
var signature = HashAlgorithms[GetHashAlgorithm(algorithm)](keyBytes, bytesToSign);
var decodedCrypto = Convert.ToBase64String(crypto);
var decodedSignature = Convert.ToBase64String(signature);
if (decodedCrypto != …Run Code Online (Sandbox Code Playgroud)