我正在编写一个函数来在文件上生成SHA256哈希.这是我使用的代码
public string ComputeHash(Byte[] inputBytes)
{
Byte[] hashedBytes = new SHA256Managed().ComputeHash(inputBytes);
return BitConverter.ToString(hashedBytes);
}
Run Code Online (Sandbox Code Playgroud)
非常简单.事实上,根据我尝试的一些工具,产生的散列似乎没有效果,实际上,它与我见过的任何其他sha256字符串不同(甚至不是256字节).例如,一个结果是
12-10-B2-60-24-75-11-95-B5-F7-F6-64-39-C3-22-9F-E7-E7-D4-13-69-18-99-C5-A7-C5-EC-2F-E2-D6-09-19
Run Code Online (Sandbox Code Playgroud)
即使我修剪掉每一个字符,一切都是大写的,而我总是看到小写的代表.(这也是一个问题)我想知道我是否以正确的方式使用该库.请帮忙
我正在使用SJCL库来加密/解密消息.我的问题是我不知道哪个使用AES或SHA256
这是我的代码:
var h = sjcl.codec.hex, count = 2048 ;
salt = h.fromBits(sjcl.random.randomWords('10','0'));
var key = h.fromBits( sjcl.misc.pbkdf2(somePassword, h.toBits(salt), count) ) ;
Run Code Online (Sandbox Code Playgroud)
接下来我可以加密/解密
var encMessage = sjcl.encrypt(key, message) ;
sjcl.decrypt(key, encMessage) ;
Run Code Online (Sandbox Code Playgroud)
AES或SHA256还是其他什么?
我试图获取ASCII编码字符串的SHA256总和.首先,我尝试了sha256sum可执行文件:
$ echo foo | sha256sum
b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c
Run Code Online (Sandbox Code Playgroud)
但是当我使用这个PyCrypto库时,我会得到一些不同的东西:
from Crypto.Hash import SHA256
h = SHA256.new();
h.update('foo');
print(h.hexdigest());
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
c5aac592460a9ac7845e341090f6f9c81f201b63e5338ee8948a6fe6830c55dc
Run Code Online (Sandbox Code Playgroud)
我怀疑我错过了关于第一个的东西,也就是说,echo foo可能有分隔符或其他东西,但我无法弄清楚是什么.
这两种情况有什么不同?
所以在过去,我曾经使用过Windows 8中没有的System.Security.Cryptography.我在Windows 8中找到的是windows.security,但我没有找到任何关于如何使用Sha256键的示例.这是我在System.Security.Cryptography中使用的旧代码
string appID = "appid";
string key = "password";
var hmacsha256 = new HMACSHA256(Encoding.Default.GetBytes(key));
hmacsha256.ComputeHash(Encoding.Default.GetBytes(appID));
string k = "";
foreach (byte test in hmacsha256.Hash)
{
k += test.ToString("X2");
}
Run Code Online (Sandbox Code Playgroud) 熵的位数是多少
SELECT SHA2(RAND(), 256);
Run Code Online (Sandbox Code Playgroud)
生成?
(实际问题:这是为密码生成随机盐的合理方法吗?)
我正在通过网络传输文件.传输过程中数据丢失容忍度为零.我被要求计算原始文件和复制文件的SHA256值,以验证内容是否相同.到目前为止,我已经基于复制和粘贴文件进行了比较,并让Windows使用附加到文件名的-copy重命名文件.我也尝试在重命名之后重命名文件,以及删除文件扩展名.到目前为止,它们都产生相同的哈希值.我还编写了更改文件属性的代码(刚刚更改了lastWrittenTime和fileCreationTime),这似乎对哈希没有影响.
Checksum result of copying and pasting a file(explorer appends "-copy to name):
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
Checksum result of renaming the -copy in explorer:
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
Checksum result of changing file extension:
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
E7273D248F191A0F914837A21BE39D229D790CA242D38651BAA06DAC9EBB63F7
Run Code Online (Sandbox Code Playgroud)
创建哈希时,文件的哪个部分被使用?
好的,零容忍度有点多,如果散列不匹配,则必须重新发送该文件.
我需要将一些python代码移植到c#中,我在这行中遇到了一些问题:
蟒蛇
hmac.new(key, message,digestmod=hashlib.sha256).digest()
Run Code Online (Sandbox Code Playgroud)
C#
HMACSHA256 hm = new HMACSHA256(key);
byte[] result = hm.ComputeHash(enc.GetBytes(message));
Run Code Online (Sandbox Code Playgroud)
当密钥和消息相同(逐字节检查)时,为什么我在C#中得到不同的结果?
我想比较两个字符串:
"password""5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8" (同样但在SHA-256中).通常情况下,函数isPassValid()会返回给我true,但我有一个false回复.为什么?
这是我的代码:
public static boolean isPassValid(){
String hash = bin2hex(getHash("password"));
return hash.equals("5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8");
}
private static byte[] getHash(String password) {
MessageDigest digest=null;
try {
digest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
}
assert digest != null;
digest.reset();
return digest.digest(password.getBytes());
}
private static String bin2hex(byte[] data) {
return String.format("%0" + (data.length*2) + "X", new BigInteger(1, data));
}
Run Code Online (Sandbox Code Playgroud) 我认为这将是一个相当普遍和直接的问题,但我搜索并无法找到它.
我是一名新手Python用户,大多是自学成才.我正在尝试我认为相当简单的练习:从输入短语生成哈希值.这是我的代码:
import hashlib
target = input("Give me a phrase: ").encode('utf-8')
hashed_target = hashlib.sha256(target)
print(hashed_target)
Run Code Online (Sandbox Code Playgroud)
我执行此操作并获得提示:给我一个短语:
我输入了"给我自由或给我死亡!"这句话.并得到哈希输出0x7f8ed43d6a80.
为了测试,我用同样的短语再次尝试,但得到了不同的输出:0x7f1cc23bca80.
我觉得这很奇怪,所以我复制了原始输入并将其粘贴进去,得到了第三个不同的哈希输出:0x7f358aabea80.
我敢肯定必须有一个简单的解释.我没有收到任何错误,代码看起来很简单,但是哈希值虽然相似但肯定是不同的.
有人可以帮忙吗?
我使用Microchip ATECC508A安全芯片的sha256功能。我的代码如下所示:
int main(void) {
uint8_t message[32] = {0}; // Method 1
//uint8_t message[32] = "00000000000000000000000000000000"; // Method 2
foobar(message, sizeof(message));
}
void foobar(uint8_t *message, int length) {
uint8_t digest[32];
sha256(message, length, digest);
// printf statements for calculated hashes ...
}
Run Code Online (Sandbox Code Playgroud)
方法1:66687AADF862BD776C8FC18B8E9F8E20089714856EE233B3902A591D0D5F2925
方法2:84E0C0EAFAA95A34C293F278AC52E45CE537BAB5E752A00E6959A13AE103B65A
方法2推导了我期望的32个零的对应哈希,但是当我在方法1中使用静态数组初始化程序时,哈希是错误的,我也不知道为什么。我在这里检查了生成的sha256哈希值。
我将不胜感激,非常感谢。
编辑:
我能够使用零字符来初始化整个数组:
uint8_t message[32] = { [0 ... 31] = '0'}。
这仅适用于gcc编译器。
sha256 ×10
c# ×3
hash ×3
python ×3
.net ×2
aes ×1
android ×1
c ×1
command-line ×1
cryptography ×1
encryption ×1
hashlib ×1
javascript ×1
mysql ×1
passwords ×1
salt ×1
security ×1
sjcl ×1
windows-8 ×1