小编Sij*_*der的帖子

我的Rails和Cocoa应用程序之间的SHA1哈希值不匹配

我有一个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)

ruby cocoa sha1 ruby-on-rails objective-c

14
推荐指数
1
解决办法
5259
查看次数

为什么在Postgres中没有"SELECT foo.*... GROUP BY foo.id"?

我有这样的查询:

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是独一无二的还不够吗?

sql postgresql

11
推荐指数
2
解决办法
2万
查看次数

可以通过Angular.js中的索引将<select>绑定到数组吗?

说我有这个:

$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}对,但该逻辑使控制器混乱.

arrays angularjs

11
推荐指数
1
解决办法
8323
查看次数

如何使用ActiveRecord按作业数量对作者进行排序?

假设我有Book模型和Author模型.我想列出按书籍数量排序的所有作者.最好的方法是什么?

我知道如何在SQL中执行此操作,方法是使用嵌套选择或使用某些连接执行.但我想知道的是如何使用ActiveRecord很好地完成这项工作.

ruby activerecord ruby-on-rails

6
推荐指数
3
解决办法
5729
查看次数

如何在Cocoa中创建仅导入文档类型?

有一个文件类型我的应用程序导入但不保存.我已经在文档类型中添加了一个条目并将其设置为只读,但这不会产生我正在寻找的导入行为.相反,我的应用程序将只打开文件,当我保存原始文件时,将以我自己的文件格式覆盖.

如何设置我的文档或文档类型,以便使用原始文档中的数据创建新文档,而不是打开原始文档?

cocoa document-based

6
推荐指数
1
解决办法
1800
查看次数

如何将MultiDex与自定义Application类一起使用?

好的,所以我正在制作一个使用.App类静态获取Context的应用程序,该类不起作用,除非置于清单下 <application android:name=.App但问题是我的时钟65k所以我有multiDex和MultiDex也需要在Manifest下<application android:name=.MultiDex否则我的应用程序将无法运行,如何在没有受影响的multidex的情况下解决这个问题,这是我最害怕看到我经历了多少麻烦才能使其工作?

android

6
推荐指数
1
解决办法
2234
查看次数

何时添加类,何时添加选择器?

鉴于这种:

<a class="details" href="#">more&hellip;</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)

我正在努力解决这个问题,我不知道该去哪里.它似乎是一个真正清晰的样式表与不带类的好标记之间的选择.

你什么时候选择一个而不是另一个?

html css

3
推荐指数
1
解决办法
102
查看次数