我试图将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#中.
伙计们,我有一个问题.我正在使用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)
承诺所在的摘要部分是否与视图/控制器范围发生变化时运行的摘要分开存在?当延迟解析时,如何让摘要自动在视图/控制器的作用域上运行?
谢谢!
我正在使用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
验证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) 在一个SO问题中给出的Golang playground 链接使用Go的sha256 lib比在Ubuntu linux中运行以下命令给出了不同的结果.
echo "sha1 this string" | sha256sum
Go的结果: fceab3bb749b11a43b89f21ccd28e3f5d8b38d5b23eeea960fc169ab482ee2cd
Linux结果: 62d44fd0392ed998179bfd4a162141d7000d1f9aa4fae26465e2e4f57d3a420e
这不是在Go中创建摘要的正确方法吗?有人能解释一下这里发生了什么吗?
我正在阅读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.rb的lib目录内),我似乎无法找到hexdigest定义方法的位置,但代码似乎工作得很好.
有人可以告诉我这是怎么发生的吗?我假设我需要寻找一个看起来像某样的代码:
def hexdigest(...)
...
end
Run Code Online (Sandbox Code Playgroud) 在ralis中获取资产消化的最简单方法是什么?
例如,这里是javascript文件
javascript_path "jquery.js"
Run Code Online (Sandbox Code Playgroud)
我想知道这是什么摘要 jquery.js
我搜索一种使用 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 中看到,但必须将其提取出来进行比较。
对于如何计算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编码,没有换行符。
有人怎么做吗?有什么把戏吗?
我有一个用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的方法:
我的问题是此方法完全消耗了流。我需要将输入流分为两部分。将一部分输入到SHA-1计算中,另一部分输入到GridFS存储桶中。
我怎样才能做到这一点?我当时正在考虑创建自己的“管道”,该管道具有输入和输出流,可以转发所有数据,但可以实时更新摘要。
我只是不知道如何开始写这样的管道。
我正在阻止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) 我知道如何从字符串中获取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)