标签: digest

如何在swift 2和3中使用常见的加密和/或计算sha256

我试图根据sha256使哈希成为密码值.我已经搜索了这个,但没有关于swift 2的信息.这个解决方案对我没用

func sha256(data:String) -> String {
        let data = self.dataUsingEncoding(NSUTF8StringEncoding)!
        var digest = [UInt8](count:Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
        CC_SHA256(data.bytes, CC_LONG(data.length), &digest)
        let hexBytes = digest.map { String(format: "%02hhx", $0) }
        return hexBytes.joinWithSeparator("")
    }
Run Code Online (Sandbox Code Playgroud)

它给出错误:使用未解析的标识符CC_SHA256_DIGEST_LENGTH

sha256 digest commoncrypto swift2

12
推荐指数
1
解决办法
9481
查看次数

在使用NTLM进行身份验证时,HttpClient 4.1.1返回401,浏览器工作正常

我正在尝试使用Apache/Jakarta HttpClient 4.1.1使用给定的凭据连接到任意网页.为了测试这一点,我在运行的dev机器上安装了最少的IIS 7.5,其中一次只有一种身份验证模式处于活动状态.基本身份验证工作正常,但每当我尝试登录时,Digest和NTLM都会返回401错误消息.这是我的代码:

    DefaultHttpClient httpclient = new DefaultHttpClient();
    HttpContext localContext = new BasicHttpContext();
    HttpGet httpget = new HttpGet("http://localhost/"); 
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(AuthScope.ANY,
            new NTCredentials("user", "password", "", "localhost"));
    if (!new File(System.getenv("windir") + "\\krb5.ini").exists()) {
        List<String> authtypes = new ArrayList<String>();
        authtypes.add(AuthPolicy.NTLM);
        authtypes.add(AuthPolicy.DIGEST);
        authtypes.add(AuthPolicy.BASIC);
        httpclient.getParams().setParameter(AuthPNames.PROXY_AUTH_PREF,
                authtypes);
        httpclient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF,
                authtypes);
    }
    localContext.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider);
    HttpResponse response = httpclient.execute(httpget, localContext);
    System.out.println("Response code: " + response.getStatusLine());
Run Code Online (Sandbox Code Playgroud)

我在Fiddler中注意到的一件事是Firefox和HttpClient发送的哈希值不同,这让我觉得IIS 7.5可能比HttpClient提供更强的哈希值?有任何想法吗?如果我能够验证这适用于NTLM,那就太棒了.摘要也会很好,但如果有必要,我可以不用它.

java iis ntlm httpclient digest

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

从computeDigest(algorithm,value)byte []获取字符串表示

Google App脚本函数computeDigest返回签名的字节数组.如何获取摘要的字符串表示?

我已经尝试过bin2String()函数.

function sign(){     
var signature = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, "thisisteststring")
Logger.log(bin2String(signature));
}


function bin2String(array) {
  var result = "";
  for (var i = 0; i < array.length; i++) {
    result += String.fromCharCode(parseInt(array[i], 2));
  }
  return result;
}
Run Code Online (Sandbox Code Playgroud)

但它把""放在日志中

javascript md5 digest google-apps-script

11
推荐指数
4
解决办法
4881
查看次数

在生产中找不到Rails 4资产(摘要路径没问题)

我在生产中遇到资产问题.

我无法加载样式表,javascripts甚至图像.

当我尝试访问某些内容时,它会显示错误 - 未找到但是当我尝试使用-digest访问时,它没问题.

我有资产预编译,通过capistrano成功部署manifest - > assets_manifest.json

谢谢

日志:样式表错误(样式表加载了themes_for_rails gem)当我尝试访问/assets/default/stylesheets/application-ec9a310f792c60f2f77810cfcd9b903f.css时,一切正常

I, [2013-07-17T14:38:45.120183 #31938]  INFO -- : Started GET "/assets/default/stylesheets/application.css?locale=cs" for 90.181.17.25 at 2013-07-17 14:38:45 +0200
I, [2013-07-17T14:38:45.123007 #31938]  INFO -- : Processing by ThemesForRails::AssetsController#stylesheets as CSS
I, [2013-07-17T14:38:45.123429 #31938]  INFO -- :   Parameters: {"locale"=>"cs", "theme"=>"navarsi", "asset"=>"application"}
I, [2013-07-17T14:38:45.124912 #31938]  INFO -- :   Rendered text template (0.0ms)
I, [2013-07-17T14:38:45.125177 #31938]  INFO -- : Completed 404 Not Found in 2ms (Views: 0.5ms | ActiveRecord: 0.0ms)
Run Code Online (Sandbox Code Playgroud)

图像日志错误:

ActionController::RoutingError (No route matches …
Run Code Online (Sandbox Code Playgroud)

assets ruby-on-rails digest sprockets

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

每个请求的Apache HTTP客户端4.3凭据

我一直在查看摘要认证示例:

http://hc.apache.org/httpcomponents-client-4.3.x/examples.html

在我的场景中,有几个线程发出HTTP请求,并且每个线程都必须使用自己的一组凭据进行身份验证.另外,请考虑这个问题可能非常具体针对Apache HTTP客户端4.3以上,4.2可能以不同的方式处理身份验证,尽管我自己没有检查它.也就是说,实际问题就出现了.

我想只使用一个客户端实例(该类的静态成员,即线程安全)并为其提供连接管理器以支持多个并发请求.关键是每个请求都会提供不同的凭据,我没有看到为每个请求分配凭据的方法,因为在构建http客户端时设置了凭据提供程序.从上面的链接:

[...]

    HttpHost targetHost = new HttpHost("localhost", 80, "http");
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(
            new AuthScope(targetHost.getHostName(), targetHost.getPort()),
            new UsernamePasswordCredentials("username", "password"));
    CloseableHttpClient httpclient = HttpClients.custom()
            .setDefaultCredentialsProvider(credsProvider).build();
Run Code Online (Sandbox Code Playgroud)

[...]

检查:

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html#d5e600

第4.4点(寻求4.4.HTTP认证和执行上下文)中的代码示例似乎表示HttpClientContext被赋予auth高速缓存和凭证提供者,然后被传递给HTTP请求.在它旁边执行请求,似乎客户端将在HTTP请求中获得主机的凭据过滤.换句话说:如果上下文(或缓存)具有当前HTTP请求的目标主机的有效凭据,则他将使用它们.对我来说问题是不同的线程将对同一主机执行不同的请求.

有没有办法为每个HTTP请求提供自定义凭据?

在此先感谢您的时间!:)

http credentials digest apache-httpcomponents apache-httpclient-4.x

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

Glassfish安全性 - jdbcRealm:如何使用SHA-256摘要配置登录

我在glassfish v3.0.1 b22中使用jdbcRealm来保证安全性.它被设置为使用我的数据库中的USER表进行身份验证,方法是访问以下博客:http://blogs.oracle.com/foo/entry/mort_learns_jdbc_realm_authentication.如果我将摘要算法保留为纯文本,我的工作正常.但是,当我尝试使用SHA-256进行摘要算法时,它会停止工作.我所做的是在Glassfish中指定 - 安全 - 领域 - jdbcRealm - 我想要SHA-256的摘要(我只是在摘要字段中键入SHA-256).然后我写了一个简单的Java程序,将密码文本转换为SHA-256哈希.然后我将该哈希粘贴到数据库中的密码字段中.顺便说一句,密码字段是类型varchar(30).我不能再登录了.有一点我注意到我的简单Java程序每次为同一文本字段生成不同的哈希值.

下面是我简单的java程序:

        MessageDigest md = MessageDigest.getInstance("SHA-256");
        String text = "admin";
        md.update(text.getBytes("UTF-8"));
        byte[] digest = md.digest();
        System.out.println(digest.toString());
Run Code Online (Sandbox Code Playgroud)

java glassfish sha256 digest jdbcrealm

10
推荐指数
1
解决办法
6985
查看次数

PHP摘要HTTP身份验证示例不起作用,为什么?

所以我决定对我的REST API使用摘要HTTP身份验证.我用Google搜索并在PHP手册中找到了一个条目,其中有一个如何操作的示例.所以我复制脚本,将它放在我的服务器上的index.php中,在浏览器中打开页面,在输入我的凭据后,浏览器再次询问它们,我陷入无限循环的输入凭据.该脚本包含在下面,可以在这里找到.

示例#7摘要HTTP身份验证示例

<?php
$realm = 'Restricted area';

//user => password
$users = array('admin' => 'mypass', 'guest' => 'guest');


if (empty($_SERVER['PHP_AUTH_DIGEST'])) {
    header('HTTP/1.1 401 Unauthorized');
    header('WWW-Authenticate: Digest realm="'.$realm.
           '",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');

    die('Text to send if user hits Cancel button');
}


// analyze the PHP_AUTH_DIGEST variable
if (!($data = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) ||
    !isset($users[$data['username']]))
    die('Wrong Credentials!');


// generate the valid response
$A1 = md5($data['username'] . ':' . $realm . ':' . $users[$data['username']]);
$A2 = md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response = md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);

if ($data['response'] != $valid_response)
    die('Wrong …
Run Code Online (Sandbox Code Playgroud)

php authentication http digest digest-authentication

10
推荐指数
1
解决办法
1万
查看次数

基础36表示摘要

我希望能够获取任意字符串,通过散列函数(如MD5)运行它,然后在base-36中解释生成的摘要.

我知道在Ruby中已经存在一个Digest库,但据我所知,我无法得到摘要的原始字节; 该to_s函数被映射到hexdigest,当然,它是base-16.

ruby hash digest base36

10
推荐指数
1
解决办法
4678
查看次数

在Ruby中将十六进制摘要转换为base64

我有一个文件的MD5十六进制摘要的字符串表示,我想转换为base64,以便在上传时使用Content-MD5 HTTP标头.是否有比以下更清晰或更有效的机制?

def hex_to_base64_digest(hexdigest)
  [[hexdigest].pack("H*")].pack("m").strip
end

hex_digest = "65a8e27d8879283831b664bd8b7f0ad4"
expected_base64_digest = "ZajifYh5KDgxtmS9i38K1A=="

raise "Does not match" unless hex_to_base64_digest(hex_digest) === expected_base64_digest
Run Code Online (Sandbox Code Playgroud)

ruby base64 hex md5 digest

10
推荐指数
1
解决办法
6147
查看次数

使用C程序验证使用私钥签名的摘要

我将解释到目前为止我所做的所有步骤,并以我的问题结束.

使用OpenSSL 1.0.1e-fips 2013年2月11日

生成私钥和公钥

openssl genrsa -des3 -out private.pem 2048
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
Run Code Online (Sandbox Code Playgroud)

使用摘要和私钥签名消息

openssl dgst -sha256 -sign private.pem -out message.secret message.txt
Run Code Online (Sandbox Code Playgroud)

在这一点上,我有一个公钥,一个签名的消息(带摘要)和原始消息.

第1部分 - 使用CLI(这个工作)

使用CLI我设法验证摘要:

openssl dgst -sha256 -verify public.pem -signature message.secret message.txt
Run Code Online (Sandbox Code Playgroud)

我将"已验证"作为返回值.

第2部分 - 使用C程序

我的程序看起来像这样:

哪里:

msg是message.txt

签名是message.secret

pkey是公钥(使用PEM_read_PUBKEY实现)

int verify_it(const byte* msg, size_t msg_len, byte* signature, EVP_PKEY* pkey) {
    EVP_MD_CTX      *ctx;
    size_t          sig_len;
    int             bool_ret;
    int             ret_val;

    ret_val = EXIT_SUCCESS;
    ctx = NULL;

    do
    {
        ctx = …
Run Code Online (Sandbox Code Playgroud)

c openssl digest

9
推荐指数
1
解决办法
5747
查看次数