我想将一些Java中的代码转换为C#.
Java代码:
private static final byte[] SALT = "NJui8*&N823bVvy03^4N".getBytes();
public static final String getSHA256Hash(String secret)
{
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.update(secret.getBytes());
byte[] hash = digest.digest(SALT);
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < hash.length; i++) {
hexString.append(Integer.toHexString(0xFF & hash[i]));
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
throw new RuntimeException("SHA-256 realization algorithm not found in JDK!");
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用SimpleHash 类时,我得到了不同的哈希值
更新:
例如:
Java:byte [] hash = digest.digest(SALT); 生成(前6个字节):
[0] = 9
[1] …Run Code Online (Sandbox Code Playgroud) 拥有128个字节的数据,例如:
00000001c570c4764aadb3f09895619f549000b8b51a789e7f58ea750000709700000000103ca064f8c76c390683f8203043e91466a7fcc40e6ebc428fbcc2d89b574a864db8345b1b00b5ac00000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
Run Code Online (Sandbox Code Playgroud)
并且想要在其上执行SHA-256哈希,必须将它分成两个64字节的数据并在将结果一起散列之前单独散列它们.如果要经常更改数据后半部分的某些位,可以简化计算并仅将前半部分数据哈希一次.如何在Google Go中做到这一点?我试着打电话
func SingleSHA(b []byte)([]byte){
var h hash.Hash = sha256.New()
h.Write(b)
return h.Sum()
}
Run Code Online (Sandbox Code Playgroud)
但不是正确的答案
e772fc6964e7b06d8f855a6166353e48b2562de4ad037abc889294cea8ed1070
Run Code Online (Sandbox Code Playgroud)
我有
12E84A43CBC7689AE9916A30E1AA0F3CA12146CBF886B60103AEC21A5CFAA268
Run Code Online (Sandbox Code Playgroud)
在比特币论坛上讨论这个问题时,有人提到获得中间状态哈希可能存在一些问题.
如何计算Google Go中的中间状态SHA-256哈希值?
我正在尝试设置JMeter以连接到一个服务,该服务需要在开始之前和中间请求之前对某些变量进行一些散列.
我创建了一个用户定义的变量,它具有纯文本的身份验证信息.
在调用第一个HTTP请求之前,我需要使用SHA256散列密码,使用base64对其进行编码,然后转换为大写.
我将收到auth_token一个JSON格式化的响应机构.然后我需要对SHA256 -> base64 -> uppercaseauth_token 执行相同的链,从那时起它将在请求头中使用.
我正在尝试使用C#代码中的CryptoAPI将SHA256时间戳添加到已签名的程序集中.这是我正在使用的代码:
Signer.TimestampSignedAssembly("MyAssembly.exe", "http://tsa.starfieldtech.com");
Run Code Online (Sandbox Code Playgroud)
签名者类:
public static class Signer
{
[StructLayoutAttribute(LayoutKind.Sequential)]
struct SIGNER_SUBJECT_INFO
{
public uint cbSize;
public IntPtr pdwIndex;
public uint dwSubjectChoice;
public SubjectChoiceUnion Union1;
[StructLayoutAttribute(LayoutKind.Explicit)]
internal struct SubjectChoiceUnion
{
[FieldOffsetAttribute(0)]
public IntPtr pSignerFileInfo;
[FieldOffsetAttribute(0)]
public IntPtr pSignerBlobInfo;
}
}
[StructLayoutAttribute(LayoutKind.Sequential)]
struct SIGNER_FILE_INFO
{
public uint cbSize;
public IntPtr pwszFileName;
public IntPtr hFile;
}
[DllImport("Mssign32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern int SignerTimeStampEx2(
uint dwFlags, // DWORD
IntPtr pSubjectInfo, // SIGNER_SUBJECT_INFO
string pwszHttpTimeStamp, // LPCWSTR
uint dwAlgId, …Run Code Online (Sandbox Code Playgroud) 我有一个带有双MD5密码和盐的vBulletin数据库,是否可以在vBulletin数据库中获取密码,将它们转换为SHA256,然后将它们存储在新数据库中?有没有真正简单的方法来做到这一点?
我唯一的理由是阻止用户创建新帐户,并停止使用MD5.
我正在将一些Java代码移植到PHP代码中.在Java中,我有一个哈希SHA256代码,如下所示:
public static String hashSHA256(String input)
throws NoSuchAlgorithmException {
MessageDigest mDigest = MessageDigest.getInstance("SHA-256");
byte[] shaByteArr = mDigest.digest(input.getBytes(Charset.forName("UTF-8")));
StringBuilder hexStrBuilder = new StringBuilder();
for (int i = 0; i < shaByteArr.length; i++) {
hexStrBuilder.append(Integer.toHexString(0xFF & shaByteArr[i]));
}
return hexStrBuilder.toString();
}
Run Code Online (Sandbox Code Playgroud)
在PHP中,我哈希如下:
$hash = hash("sha256", utf8_encode($input));
Run Code Online (Sandbox Code Playgroud)
我用input ="test"运行示例代码.但是,我得到了2个不同的哈希字符串:
Java: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2bb822cd15d6c15b0f0a8
PHP: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么以及如何让它们相互匹配?请注意,我无法修改Java实现代码,只能修改PHP.
万分感激!
我正在尝试使用带有secp256r1曲线(P256)的ECDSA和用于消息散列的SHA256算法生成签名.我也在使用Bouncy Castle图书馆.代码如下,
public class MyTest {
/**
* @param args
*/
public static void main(String[] args) {
new MyTest().getSign();
}
void getSign() {
// Get the instance of the Key Generator with "EC" algorithm
try {
KeyPairGenerator g = KeyPairGenerator.getInstance("EC");
ECGenParameterSpec kpgparams = new ECGenParameterSpec("secp256r1");
g.initialize(kpgparams);
KeyPair pair = g.generateKeyPair();
// Instance of signature class with SHA256withECDSA algorithm
Signature ecdsaSign = Signature.getInstance("SHA256withECDSA");
ecdsaSign.initSign(pair.getPrivate());
System.out.println("Private Keys is::" + pair.getPrivate());
System.out.println("Public Keys is::" + pair.getPublic());
String msg = "text ecdsa with sha256";//getSHA256(msg) …Run Code Online (Sandbox Code Playgroud) 我确信有一个简单的答案,但我如何使用TLSv1.2与非TLSv1.2密码套件?例如,此链接显示连接正在使用TLS 1.2,但使用的是AES_256_CBC_SHA?我以为所有TLSv1.2都必须是SHA256或更高?
而且,paypal home显示"Connection使用TLS 1.2",但所选的密码是RSA_128_RC4_SHA ???
我错过了什么吗?(使用谷歌浏览器的所有信息)
无法发布我的捕获的屏幕,因为我没有至少10个声誉??? WTF
我做了一些环顾四周,但我只能找到使用Objective-C创建SHA256哈希的示例.有没有办法只用Swift4做到这一点?
我正在编写脚本以建立图片数据库。我有一个可以正常工作的脚本。它在9分24秒内通过包含5670个文件的文件夹,总计13.08 GB数据。然后,我尝试在更新的较大照片上执行,但执行量似乎大大减少了。在20分钟内,仅计算了一个文件夹中的三个小预览文件的哈希,其中包含431个文件,总计7.58 GB。
我究竟做错了什么?
var fs = require('fs')
var crypto = require('crypto')
var util = require('util')
var p = require('path')
var sqlite3 = require('sqlite3').verbose()
var db = new sqlite3.Database('./sqlite.db')
const hash_algorithm = 'sha256'
var fileCount = 0
function getFiles(directory) {
fs.readdir(directory, function(err, files) {
for (var i in files) {
var filepath = directory + '/' + files[i]
fileStat(filepath)
}
})
}
function fileStat(filepath) {
fs.stat(filepath, function(err, stats) {
if (stats.isDirectory()) {
getFiles(filepath)
} else {
computeHash(filepath, hash_algorithm, function(err, hash) …Run Code Online (Sandbox Code Playgroud)