我有一个Cocoa应用程序将一些数据连同该数据的SHA1哈希发送到Rails应用程序,该应用程序验证数据和哈希匹配,但它们没有.
为了确保我已经在Rails和Cocoa端记录了散列到控制台的数据的十六进制版本,并且它们完全匹配.
这是可可部分:
#import <CommonCrypto/CommonDigest.h>
//...
- (NSData *)dataOfSHA1Hash
{
unsigned char hashBytes[CC_SHA1_DIGEST_LENGTH];
CC_SHA1([self bytes], CC_SHA1_DIGEST_LENGTH, hashBytes);
return [NSData dataWithBytes:hashBytes length:CC_SHA1_DIGEST_LENGTH];
}
//...
NSData *signatureData = [signedData dataOfSHA1Hash];
NSString *signature = [signatureData hexadecimalString];
Run Code Online (Sandbox Code Playgroud)
..和Rails:
Digest::SHA1.hexdigest(signed_data)
Run Code Online (Sandbox Code Playgroud)
请注意,-hexadecimalString是NSData的自定义扩展(似乎没有内置),我已经测试过了.这种方法似乎不是问题.
那么,为什么我的SHA1哈希值不匹配相同的数据呢?有任何想法吗?
编辑:示例
对于字符串"Hello World!"
Cocoa: f98ee9c814c2f3c66ccdca641298d12cd26741ec Rails: 2ef7bde608ce5404e97d5f042f95f89f1c232871
可可:
NSMutableData *signedData = [[NSMutableData alloc] init];
[signedData appendData:[@"Hello World!" dataUsingEncoding:NSUTF8StringEncoding]];
NSData *signatureData = [signedData dataOfSHA1Hash];
[signedData release];
NSString *signature = [signatureData hexadecimalString];
NSLog(@"Signature: %@", signature);
// output: Signature: f98ee9c814c2f3c66ccdca641298d12cd26741ec
Run Code Online (Sandbox Code Playgroud)
红宝石:
>> Digest::SHA1.hexdigest("Hello World!")
=> "2ef7bde608ce5404e97d5f042f95f89f1c232871"
Run Code Online (Sandbox Code Playgroud) 我有这样的查询:
select foo.*, count(bar.id)
from foo inner join bar on foo.id = bar.foo_id
group by foo.id
Run Code Online (Sandbox Code Playgroud)
这适用于SQLite和MySQL.然而,Postgres抱怨我不包括group by条款中的所有foo列.为什么是这样?foo.id是独一无二的还不够吗?
说我有这个:
$scope.items = ["foo", "bar", "baz"];
$scope.index = 1;
Run Code Online (Sandbox Code Playgroud)
我如何将其绑定到<select>?
我试过了:<select ng-model="index" ng-options="i for i in items">但是在加载时选择了一个空白选项.
这:<select ng-model="items[index]" ng-options="i for i in items">似乎最初工作,但在更改选择时,项目[索引]的值发生了变化,这显然不是我们想要的.
我的解决方法是将数组映射到{num,title}对,但该逻辑使控制器混乱.
假设我有Book模型和Author模型.我想列出按书籍数量排序的所有作者.最好的方法是什么?
我知道如何在SQL中执行此操作,方法是使用嵌套选择或使用某些连接执行.但我想知道的是如何使用ActiveRecord很好地完成这项工作.
有一个文件类型我的应用程序导入但不保存.我已经在文档类型中添加了一个条目并将其设置为只读,但这不会产生我正在寻找的导入行为.相反,我的应用程序将只打开文件,当我保存原始文件时,将以我自己的文件格式覆盖.
如何设置我的文档或文档类型,以便使用原始文档中的数据创建新文档,而不是打开原始文档?
好的,所以我正在制作一个使用.App类静态获取Context的应用程序,该类不起作用,除非置于清单下
<application android:name=.App但问题是我的时钟65k所以我有multiDex和MultiDex也需要在Manifest下<application android:name=.MultiDex否则我的应用程序将无法运行,如何在没有受影响的multidex的情况下解决这个问题,这是我最害怕看到我经历了多少麻烦才能使其工作?
鉴于这种:
<a class="details" href="#">more…</a>
...
<input type="submit" value="Gogogo">
Run Code Online (Sandbox Code Playgroud)
说两者都应该有非常相似的外观,因为这是设计师想要的.你这样做:
<a class="fancybutton" ...
<input class="fancybutton" ...
.fancybutton { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
或这个?
a.details, .someform input[type="submit"] { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
我正在努力解决这个问题,我不知道该去哪里.它似乎是一个真正清晰的样式表与不带类的好标记之间的选择.
你什么时候选择一个而不是另一个?
cocoa ×2
ruby ×2
activerecord ×1
android ×1
angularjs ×1
arrays ×1
css ×1
html ×1
objective-c ×1
postgresql ×1
sha1 ×1
sql ×1