标签: digest

Python的hash.digest()使用什么c#等效编码?

我试图将python程序移植到c#.这段话应该是一个演练,但目前正在折磨我:

hash = hashlib.md5(inputstring).digest()
Run Code Online (Sandbox Code Playgroud)

在c#中生成类似的MD5哈希之后,创建一个与原始python程序类似的哈希字符串或者我的整个应用程序将失败是至关重要的.

我的困惑在于在c#中转换为字符串时使用的编码

?Encoding enc = new ?Encoding();
string Hash =enc.GetString(HashBytes); //HashBytes is my generated hash
Run Code Online (Sandbox Code Playgroud)

因为我在使用Encoding.Default时无法创建两个类似的哈希值

string Hash = Encoding.Default.GetString(HashBytes);
Run Code Online (Sandbox Code Playgroud)

所以我想知道python的deafult hash.digest()编码会有所帮助

编辑

好吧,也许更多代码会更清楚地表达我的问题.在python程序中计算散列后,执行一些计算,即

hash = hashlib.md5(inputstring).digest()

for i in range(0,6):

value += ord(hash[i])

return value
Run Code Online (Sandbox Code Playgroud)

现在你能看出为什么两个不同的Hash字符串会有问题吗?运行python程序时出现的一些字符由'?'重新表示 在C#中.

c# python encoding digest

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

如何在一个范围内获取延迟对象集以包含在AngularJS中另一个范围的摘要中?

伙计们,我有一个问题.我正在使用AngularJS,我在Angular服务定义中设置了一个延迟对象:

angular.module('myServices', []).
  service('Brand', function($rootScope, $q){
    var service = {
        getNext: function() {
            var deferred = $q.defer();

            setTimeout(function() {
                deferred.resolve('foo');
            }, 2000);

            return deferred.promise;
        }
    };

    return service;
});
Run Code Online (Sandbox Code Playgroud)

该服务在我的控制器中使用:

angular.module({
    controllers: {
        brand: function($scope, Brand) {
            $scope.changeBrand = function() {
                $scope.brand = Brand.getNext();
            }
        }
    }
}, ['myServices]);
Run Code Online (Sandbox Code Playgroud)

最后,视图等待承诺得到解决然后显示:

<a ng-click="changeBrand()" id="changeBrand">Change</a>
<p ng-bind="brand"></p>
Run Code Online (Sandbox Code Playgroud)

麻烦的是,虽然承诺正在得到解决,虽然视图确实等待承诺得到解决并显示结果,但它不会立即执行.它只会在我添加此代码并单击链接时显示:

// View:
<a ng-click="apply()">Apply</a> 

// Controller:
$scope.apply = function() {
    $scope.$apply();
};
Run Code Online (Sandbox Code Playgroud)

承诺所在的摘要部分是否与视图/控制器范围发生变化时运行的摘要分开存在?当延迟解析时,如何让摘要自动在视图/控制器的作用域上运行?

谢谢!

javascript scope digest deferred angularjs

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

hexdigest在linux和windows中为同一个文件生成不同的值


我正在使用Digest :: MD5模块,并在该hexdigest中为windows和linux返回不同的值.

请帮我解决这个问题.

use Digest::MD5;
my $ctx=Digest::MD5->new();
open RD, "input.txt";
$ctx->addfile(*RD);
close RD;
print $ctx->hexdigest;
Run Code Online (Sandbox Code Playgroud)

input.txt文件具有以下内容:

hello
Run Code Online (Sandbox Code Playgroud)

输出:窗口

5d41402abc4b2a76b9719d911017c592
Run Code Online (Sandbox Code Playgroud)

输出:Linux

af5597c29467a96523a70787c319f4db
Run Code Online (Sandbox Code Playgroud)

谢谢,
Saravanan

perl perl-module digest md5sum perl-data-structures

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

PKCS#7中的消息摘要过程(PDF格式的签名)

验证PDF文件中的签名时会出现此问题.标准中说:

消息摘要计算过程的结果取决于signedAttrs字段是否存在.当该字段不存在时,结果仅是如上所述的内容的消息摘要.但是,当该字段存在时,结果是signedAttrs字段中包含的SignedAttrs值的完整DER编码的消息摘要.

我解析了签名并得到了signedAttrs:

[0](4 elem)
   SEQUENCE(2 elem)
      OBJECT IDENTIFIER1.2.840.113549.1.9.3            // ContentType
      SET(1 elem)
        OBJECT IDENTIFIER1.2.840.113549.1.7.1
   SEQUENCE(2 elem)
      OBJECT IDENTIFIER1.2.840.113549.1.9.5            // SigningTime
      SET(1 elem)
        UTCTime2014-04-13 02:58:41 UTC
   SEQUENCE(2 elem)
      OBJECT IDENTIFIER1.2.840.113549.1.9.4            // MessageDigest
      SET(1 elem)
        OCTET STRING(20 byte) 194E0BA9C4B9A53D5E9E5B7B94D7DB42BEA4C28F
   SEQUENCE(2 elem)
      OBJECT IDENTIFIER1.2.840.113549.1.9.15
      SET(1 elem)
        SEQUENCE(8 elem)
          SEQUENCE(1 elem)
            OBJECT IDENTIFIER2.16.840.1.101.3.4.1.42
          SEQUENCE(1 elem)
            OBJECT IDENTIFIER2.16.840.1.101.3.4.1.22
          SEQUENCE(1 elem)
            OBJECT IDENTIFIER2.16.840.1.101.3.4.1.2
          SEQUENCE(1 elem)
            OBJECT IDENTIFIER1.2.840.113549.3.7
          SEQUENCE(2 elem)
            OBJECT IDENTIFIER1.2.840.113549.3.2
            INTEGER128
          SEQUENCE(2 elem)
            OBJECT IDENTIFIER1.2.840.113549.3.2
            INTEGER64
          SEQUENCE(1 elem)
            OBJECT IDENTIFIER1.3.14.3.2.7
          SEQUENCE(2 elem) …
Run Code Online (Sandbox Code Playgroud)

pdf message signature digest pkcs#7

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

为什么Go sha256给出的结果与Ubuntu命令sha256sum不同?

在一个SO问题中给出的Golang playground 链接使用Go的sha256 lib比在Ubuntu linux中运行以下命令给出了不同的结果.

echo "sha1 this string" | sha256sum

Go的结果: fceab3bb749b11a43b89f21ccd28e3f5d8b38d5b23eeea960fc169ab482ee2cd

Linux结果: 62d44fd0392ed998179bfd4a162141d7000d1f9aa4fae26465e2e4f57d3a420e

这不是在Go中创建摘要的正确方法吗?有人能解释一下这里发生了什么吗?

ubuntu sha256 digest go

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

Digest :: SHA2.hexdigest()在哪里定义?

我正在阅读Agile Web Development with Rails一书中的教程,我发现了以下代码:

def User.encrypt_password(password, salt) 
  Digest::SHA2.hexdigest(password + "wibble" + salt)
end
Run Code Online (Sandbox Code Playgroud)

然而,查看Digest源代码(digest.rb以及在我的ruby安装中digest/sha2.rblib目录内),我似乎无法找到hexdigest定义方法的位置,但代码似乎工作得很好.

有人可以告诉我这是怎么发生的吗?我假设我需要寻找一个看起来像某样的代码:

def hexdigest(...)
   ...
end
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails sha digest

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

rails sprockets获取资产的摘要

在ralis中获取资产消化的最简单方法是什么?

例如,这里是javascript文件

javascript_path "jquery.js"
Run Code Online (Sandbox Code Playgroud)

我想知道这是什么摘要 jquery.js

ruby-on-rails digest sprockets asset-pipeline

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

使用 iText 库在 pdf 中插入隐藏摘要

我搜索一种使用 iText 库(Java)将摘要(字节数组或字符串)插入 PDF 文件的方法。我使用以下方法从字符串创建摘要:

private String crypt(double x, ByteArrayOutputStream baos) throws UnsupportedEncodingException, NoSuchAlgorithmException{
    MessageDigest md = MessageDigest.getInstance("SHA-256");
    md.update(String.valueOf(x).getBytes("UTF-8"));
    md.update(String.valueOf(baos).getBytes("UTF-8"));
    byte[] digest = md.digest();

    StringBuffer sb = new StringBuffer();
    for(byte d:digest){
        sb.append(Integer.toHexString(0xFF & d));
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

摘要不应在 PDF 中看到,但必须将其提取出来进行比较。

java pdf security itext digest

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

如何计算XAdES签名的SignedProperties的摘要?

对于如何计算XAdES签名中SignedProperties元素的摘要,我已经进行了几天的努力。我有一个参考XML文件,其中计算了两个摘要值(正在签名的文件和已签名的属性),我知道它很好,因为它通过了验证程序。我为要签名的文件计算了正确的摘要值,但是无论将什么作为摘要方法的输入(我使用OpenSSL),我都无法获得与参考文件相同的值。当然,我自己的文件此后不会通过验证程序。我使用以下命令来计算摘要:

openssl dgst -sha256 -binary myfile.xml | openssl base64
Run Code Online (Sandbox Code Playgroud)

我通过提取参考文件的SignedProperties元素记录了文件myfile.xml并按原样保存。

<xades:SignedProperties Id="xmldsig-f6a6a2a1-87af-4720-8eed-cf4532e99106-signedprops"><xades:SignedSignatureProperties><xades:SigningTime>2015-09-22T09:02:48.624+02:00</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>cAJECbIzXZiLH+ILWPrM5jfA13GKcEC8t1qe7/BxqBM=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=thawte SHA256 Code Signing CA,O=thawte\, Inc.,C=US</ds:X509IssuerName><ds:X509SerialNumber>13010307134774063901853305426952669967</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference="#xmldsig-f6a6a2a1-87af-4720-8eed-cf4532e99106-ref0"><xades:Description>signature détachée du fichier indexfile.txt</xades:Description><xades:MimeType>text/plain</xades:MimeType></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties></xades:SignedProperties>
Run Code Online (Sandbox Code Playgroud)

显然,我应该得到的价值:

6JK3GHDL25+EIRefNMQJ3SOGSI8uzQ45PiziMomZkYs=
Run Code Online (Sandbox Code Playgroud)

但是我不明白。我不知道是否必须进行一些转换或规范化,关于这部分的说明非常模糊。它以UTF-8编码,没有换行符。

有人怎么做吗?有什么把戏吗?

digest digital-signature xml-signature

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

Java:如何实时计算正在保存的流中的sha1摘要?

我有一个用Java编写的servlet,它接受多部分形式的发布文件,该文件需要保存在MongoDb / GridFS中。我已经有为此工作的代码。

这是一个代码片段,显示了如何使用org.apache.commons.fileupload包完成此操作。它几乎不占用内存,因为它不会在内存中保留太多数据。

        ServletFileUpload upload = new ServletFileUpload();
        FileItemIterator iter = upload.getItemIterator(req);
        while (iter.hasNext()) {
            FileItemStream item = iter.next();
            String name = item.getFieldName();
            InputStream stream = item.openStream();
            if (item.isFormField()) {
                toProcess.put(name, Streams.asString(stream));
            } else {
                String fileName = item.getName();
                String contentType = item.getHeaders().getHeader("Content-Type");
                GridFSUploadOptions options = new GridFSUploadOptions()
                        // .chunkSizeBytes(358400)
                        .metadata(new Document("content_type", contentType));
                ObjectId fileId = gridFSFilesBucket.uploadFromStream(fileName, stream, options);
                fileIds.add(fileId);
                fileNames.add(fileName);
            }
Run Code Online (Sandbox Code Playgroud)

我还需要计算所有文件的sha1哈希值。阿帕奇digestutils可以用于此目的。它具有一种可以计算流中的sha1的方法:

https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html#sha1-java.io.InputStream-

我的问题是此方法完全消耗了流。我需要将输入流分为两部分。将一部分输入到SHA-1计算中,另一部分输入到GridFS存储桶中。

我怎样才能做到这一点?我当时正在考虑创建自己的“管道”,该管道具有输入和输出流,可以转发所有数据,但可以实时更新摘要。

我只是不知道如何开始写这样的管道。

java stream digest

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

需要有关SIP摘要身份验证的帮助

我正在阻止SIP摘要身份验证.这是来自服务器的401响应.

SIP/2.0 401 Unauthorized
Call-ID: ed1c36aedb36da07d8d2cfe6b0126521@0:0:0:0:0:0:0:0
CSeq: 7 REGISTER
From: "myuser" <sip:myuser@sip2sip.info>;tag=c41616b8
To: "myuser" <sip:myuser@sip2sip.info>;tag=ac7e0189ab09b4fde10c77c8597b662a.5cbe
Via: SIP/2.0/UDP 172.22.162.100:5060;branch=z9hG4bK-333333-?dd5444afbd4938fe01d9e1a47ccaf139
WWW-Authenticate: Digest realm="sip2sip.info", nonce="4d417ba7bb1906c1434ba9645b35d5a84d0e71ad"
Server: SIP Thor on OpenSIPS XS 1.4.5
Content-Length: 0
Run Code Online (Sandbox Code Playgroud)

根据RFC 2617,构建摘要响应的代码应如下所示(在Groovy中)

def md5(user, realm, pass, method, String uri, nonce) {
  def paramsDump = """md5() params
  user: $user
  realm: $realm
  password: $pass
  method: $method
  uri: $uri
  nonce: $nonce
"""
  print paramsDump

  def A1 = DigestUtils.md5Hex ("$user:$realm:$pass")    
  def A2 = DigestUtils.md5Hex ("$method:$uri")

  def left = DigestUtils.md5Hex (A1)      
  def …
Run Code Online (Sandbox Code Playgroud)

authentication groovy sip digest

0
推荐指数
1
解决办法
2238
查看次数

Python 3.5将字符串转换为sha1 sum的类型

我知道如何从字符串中获取sha1,然后从中获取摘要sha1,这是我的目标。但是现在的问题是,我已经有了sha1(它来自文件而不是字符串),并且想要从中获取摘要sha1(并使用base 64对其进行编码)。

mysha1 = "FB9BA6614A6AEB7A040881E09A4B8211405831FF"
print(base64.b64encode(mysha1.digest()))
Run Code Online (Sandbox Code Playgroud)

这导致

AttributeError: 'str' object has no attribute 'digest'
Run Code Online (Sandbox Code Playgroud)

sha digest python-3.x

0
推荐指数
1
解决办法
1521
查看次数