是否可以在Windows XP上使用SHA256CryptoServiceProvider和相关的SHA2提供程序?我知道提供商使用Vista中包含的加密服务以上是否可以在Microsoft的XP中安装这些服务?
编辑:我应该提供更多信息,MSDN上的文档在Windows XP中受支持是错误的.请参阅http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=355031,其中Microsoft已确认并接受此设计.然而,在任何地方都没有列出任何工作(我看到)所以我不确定是否可以安装这需要正常工作的服务,或者是否像在试图在WinXP上安装IIS 6或7的windwills倾斜.
如果我使用比数据(例如sha-256)更大的字节大小的散列算法散列大小受限的类似数据(例如社会安全号),那么散列将保证与单词相同的唯一性级别.原始数据?
我发现在java中计算sha256很慢.例如,它比python慢.我写了两个简单的基准测试来计算1GB零的sha256.在这两种情况下,结果都是相同且正确的,但是python时间是5653ms,java时间是8623ms(慢了53%).结果每次都相似,这对我来说是一个重要的区别.
如何更快地在java中进行计算?
基准:
Java的:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class BenchmarkSha256 {
public static void main(String... args) throws NoSuchAlgorithmException {
int size = 1024 * 1024;
byte[] bytes = new byte[size];
MessageDigest md = MessageDigest.getInstance("SHA-256");
long startTime = System.nanoTime();
for (int i = 0; i < 1024; i++)
md.update(bytes, 0, size);
long endTime = System.nanoTime();
System.out.println(String.format("%1$064x", new java.math.BigInteger(1, md.digest())));
System.out.println(String.format("%d ms", (endTime - startTime) / 1000000));
}
}
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
#!/usr/bin/env python
import hashlib
import time
size = 1024 * 1024 …Run Code Online (Sandbox Code Playgroud) 我想使用带有SHA256的PBKDF2生成密码的派生哈希.与此SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1")这项工作,但它使用SHA1.随着SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256")(或SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256","SC")与spongycastle一起)我有一个错误.
如何使用PBKDF2WithHmacSHA256成功生成哈希?
在PHP中我有以下功能:
base64_encode(hash_hmac('sha256', $data, $secret, false));
Run Code Online (Sandbox Code Playgroud)
我正在尝试在Java中创建一个函数,它将为相同的"数据"和"秘密"参数提供相同的结果.
我试着使用这个功能:
public static String base64sha256(String data, String secret) {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] res = sha256_HMAC.doFinal(data.getBytes());
return Base64.encodeToString(res, Base64.NO_WRAP);
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了相同输入的不同结果
更新:此功能有效.请享用.
public static String base64sha256(String data, String secret) {
String hash = null;
try {
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secret_key);
byte[] res = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
hash = getHex(res);
hash = Base64.encodeToString(hash.getBytes("UTF-8"), Base64.NO_WRAP);
} catch (Exception e){}
return hash;
}
static …Run Code Online (Sandbox Code Playgroud) 我在命令行中使用散列字符串而不是在Android上的Java中获得不同的输出.我确定我做错了什么,但我看不出是什么.
命令行:
kevin@aphrodite:~$ echo derp | sha256sum
ee673d13de31533a375b41d9e57731d9bb4dbddbd6c1d2364f15be40fd783346 -
Run Code Online (Sandbox Code Playgroud)
Java的:
final String plaintext = "derp";
final MessageDigest md;
try {
md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
/* SHA-256 should be supported on all devices. */
throw new RuntimeException(e);
}
final String inputHash = bytesToHex(md.digest(plaintext.getBytes()));
Log.debug(TAG, "input hash: " + inputHash);
Run Code Online (Sandbox Code Playgroud)
Java输出:
10-05 13:32:57.412: D/Config(12082): input hash: 3f4146a1d0b5dac26562ff7dc6248573f4e996cf764a0f517318ff398dcfa792
Run Code Online (Sandbox Code Playgroud)
这是bytesToHex(...)我在另一个问答中找到的方法.我确认通过记录Integer.toHexString(b)每个来做正确的事情b.
private static final char[] hexDigit = "0123456789abcdef".toCharArray();
private static String bytesToHex(byte[] bytes) {
char[] …Run Code Online (Sandbox Code Playgroud) 我正在创建一个自动递增数字的哈希值.我已经创建了两个示例循环,我正在尝试实现此目的.
运行#1时,第一个哈希记录到控制台,第二次迭代通过循环,返回以下错误.错误:已经调用摘要
我相信这是由于文档中的这个引用:在调用hash.digest()方法之后,不能再使用Hash对象.多次调用将导致抛出错误.
如何创建一个使用Node的加密库一次创建多个哈希的循环?
// Reproduce #1
const crypto = require('crypto');
const hash = crypto.createHash('sha256');
for (let i = 0; i < 5; i++) {
hash.update('secret' + i);
console.log(hash.digest('hex'));
}
Run Code Online (Sandbox Code Playgroud) 通过使用在线工具和维基百科我发现每个sha-256加密字符串是包含数字和字符的64个字符长.因此我假设有34 ^ 36个组合(2 ^ 216由代数计算器简化).经过一些研究后我发现大多数人说有2 ^ 256种组合.有人能解释一下吗 为了使上下文清晰,我写了一篇关于加密货币的论文,并尝试解释有多少不同的加密组合以及可以花多长时间(因此可以进行多少次猜测)并将其与总的原子数进行比较.宇宙(大约10 ^ 85).
我目前正在尝试从SHA256哈希(通过rust-crypto包)生成ED25519密钥对:
extern crate crypto; // rust-crypto = "0.2.36"
use crypto::ed25519;
use crypto::sha2::Sha256;
use crypto::digest::Digest;
fn main() {
let phrase = "purchase hobby popular celery evil fantasy someone party position gossip host gather";
let mut seed = Sha256::new();
seed.input_str(&phrase);
let (_priv, _publ) = ed25519::keypair(&seed); // expects slice
}
Run Code Online (Sandbox Code Playgroud)
但是,我完全不明白如何正确地将SHA256传递给ed25519::keypair()函数.我追溯到&seed.result_str()结果:
"fc37862cb425ca4368e8e368c54bb6ea0a1f305a225978564d1bdabdc7d99bdb"
Run Code Online (Sandbox Code Playgroud)
这是正确的哈希,而&seed.result_str().as_bytes()结果是:
[102, 99, 51, 55, 56, 54, 50, 99, 98, 52, 50, 53, 99, 97, 52, 51, 54, 56, 101, 56, 101, 51, …Run Code Online (Sandbox Code Playgroud) sha256 ×10
java ×3
sha ×3
encryption ×2
android ×1
bitcoin ×1
c# ×1
cryptography ×1
digest ×1
hash ×1
javascript ×1
node.js ×1
optimization ×1
pbkdf2 ×1
php ×1
rust ×1
security ×1
unique ×1