标签: sha256

如何从 Post 请求 url 和浏览器转储中隐藏密码

这可能是一个老问题,但我仍然没有找到这个问题的正确答案,所以请耐心等待。我有一个 https 登录页面,它使用表单发布方法并将凭据发送到服务器......等等。

登录时,如果使用IE和F12进行网络监控,点击开始抓包。您可以看到一些类似于 login、servetloginauth(来自 gmail.com)的 URL,并且您可以看到包含您的用户名和密码的请求正文。好吧,可以争辩说,只有当用户没有注销时,您才能看到这一点。

现在注销并且不要关闭浏览器并从任务管理器中获取浏览器转储(任何浏览器,任何版本)(我不知道如何在 Mac 中做同样的事情)。使用 WinHex 编辑器打开转储文件并执行 Search/Find: "password=" 或实际密码(因为您测试了您自己的登录信息,您已经知道您的密码)。您可以以明文形式查看密码。

现在我的问题是,如何屏蔽密码: 1. 在 Post 请求 URL 中 2. 或者当浏览器将我的凭据保存到转储时,我需要对其进行屏蔽/加密或根本不应该保存密码.

我的jsp代码:

<s:form id="login" name="loginForm1" action="login" namespace="/" method="post" enctype="multipart/form-data" >  
      <fieldset><!-- login fieldset -->
        <div><!-- div inside login fieldset -->
                <div....
                  <label for="password" class="loginLabel">Password</label>
                  <input type="password" name="password" id="password" class="longField nofull absPosition" size="16" autocomplete="off" alt="Password" placeholder="Password" title="Password|<
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案如下,但我不需要太多努力就需要任何替代方案。

如果密码以明文形式发送,则可以从内存中读取密码。使用加盐散列技术进行密码传输将解决此问题。散列是一种密码技术,其中的实际值永远无法恢复。在加盐散列技术中,密码以散列形式存储在数据库中。服务器生成一个随机字符串盐,并将它与登录页面一起发送到客户端。页面上的 JavaScript 代码计算输入密码的哈希值,连接盐并计算整个字符串的哈希值。该值在 POST 请求中发送到服务器。

然后服务器从数据库中检索用户的散列密码,连接相同的盐并计算散列。如果用户输入了正确的密码,这两个哈希值应该匹配。

现在,POST 请求将包含密码的加盐哈希值,而明文密码将不会出现在内存中

SHA 256 是当今可用的强大散列算法 - JavaScript 中的现成实现可用并在“良好阅读”部分引用。

注意:对于包含敏感信息的页面或在数据库中可以修改数据的页面,使用 JavaScript 来刷新浏览器的内存

和图像如下。 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

另外,我可以解决花旗银行在其网站上为客户所做的事情。我登录了网站并在转储中看到我的用户名被屏蔽了(如网站中所示),我也需要对密码字段执行相同操作的内容。有人可以解释我该怎么做吗? 在此处输入图片说明

java ssl https jsp sha256

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

SHA256给出44长度输出而不是64长度

我正在使用以下代码来执行SHA256.

public static string GenerateSaltedHash(string plainTextString, string saltString)        
        {            
            byte[] salt = Encoding.UTF8.GetBytes(saltString);
            byte[] plainText = Encoding.UTF8.GetBytes(plainTextString);
            HashAlgorithm algorithm = new SHA256Managed();

            byte[] plainTextWithSaltBytes =
              new byte[plainText.Length + salt.Length];

            for (int i = 0; i < plainText.Length; i++)
            {
                plainTextWithSaltBytes[i] = plainText[i];
            }
            for (int i = 0; i < salt.Length; i++)
            {
                plainTextWithSaltBytes[plainText.Length + i] = salt[i];
            }
            byte[] bytes = algorithm.ComputeHash(plainTextWithSaltBytes);
            return Convert.ToBase64String(algorithm.ComputeHash(plainTextWithSaltBytes));                              
        }
Run Code Online (Sandbox Code Playgroud)

由于我使用SHA256,预期结果长度为64.但是我得到了44的结果.问题是什么?44长度输出会影响安全质量吗?

c# sha256

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

为什么SHA256哈希以"="结束?

我做了一个Web服务,它在成功验证后返回一个安全令牌.

但是在调试时我注意到webservice返回的每个哈希都以"="结束,例如:

"tINH0JxmryvB6pRkEii1iBYP7FRedDqIEs0Ppbw83oc="
"INv7q72C1HvIixY1qmt5tNASFBEc0PnXRSb780Y5aeI="
"QkM8Kog8TtCczysDmKu6ZOjwwYlcR2biiUzxkb3uBio="
"6eNuCU6RBkwKMmVV6Mhm0Q0ehJ8Qo5SqcGm3LIl62uQ="
"dAPKN8aHl5tgKpmx9vNoYvXfAdF+76G4S+L+ep+TzU="
"O5qQNLEjmmgCIB0TOsNOPCHiquq8ALbHHLcWvWhMuI="
"N9ERYp+i7yhEblAjaKaS3qf9uvMja0odC7ERYllHCI="
"wsBTpxyNLVLbJEbMttFdSfOwv6W9rXba4GGodVVxgo="
"sr+nF83THUjYcjzRVQbnDFUQVTkuZOZYe3D3bmF1D8="
"9EosvgyYOG5a136S54HVmmebwiBJJ8a3qGVWD878j5k="
"8ORZmAXZ4dlWeaMOsyxAFphwKh9SeimwBzf8eYqTis="
"gVepn2Up5rjVplJUvDHtgIeaBL+X6TPzm2j9O2JTDFI="
Run Code Online (Sandbox Code Playgroud)

为什么这样的行为呢?

base64 behavior sha256

6
推荐指数
2
解决办法
3066
查看次数

signtool双重签名失败

有关尝试使用SHA1/SHA256进行双重签名时遇到的故障的问题.

我现在已经过了几年SHA256代码签名证书,但在新的一年(2016)之前,我开始使用/ FD SHA256的哈希算法是符合SHA1微软弃用.

这工作正常,但当然签名哈希不会在旧操作系统上验证.我不关心XP,但我仍然关心Vista.

我首先使用以下代码签署SHA1:

signtool sign /fd SHA1 /f "cert.pfx" /p "password" /t http://timestamp.verisign.com/scripts/timsetamp.dll "file"
Run Code Online (Sandbox Code Playgroud)

然后我尝试我的双重签名:

signtool sign /as /fd SHA256 /f "cert.pfx" /p "password" /tr http://timestamp.globalsign.com/?signature=sha2 "file"
Run Code Online (Sandbox Code Playgroud)

而signtool给了我这个:


Done Adding Additional Store
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024846/0x80070032)

现在我可以使用单个算法(SHA1或SHA256)成功签名文件,但我无法添加第二个签名.我唯一的猜测是,因为我使用的是两种算法的SAME证书,所以不喜欢这样.我是否需要为每种算法使用不同的物理证书?

只是想知道,因为在新的一年之前,我使用SHA1算法多年来一直使用SHA256证书,并且它在所有操作系统上都经过验证.

sha1 sha256 signtool

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

使用BouncyCastle生成HMAC-SHA256哈希

我需要在PCL(为Xamarin Forms开发)中生成HMAC-SHA256哈希,它不支持.NET内置的HMAC /加密类,所以我正在使用BouncyCastle来实现我的加密类.

我需要生成HMAC-SHA256哈希,但我无法在Google上找到任何示例,BouncyCastle似乎也没有任何相关文档.谁能帮我吗?

.net c# bouncycastle sha256 hmac

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

用Java实现Kraken API

所以我目前正致力于Kraken APIfor 的实现Java.我正在使用我在http://pastebin.com/nHJDAbH8上找到的示例代码.

Kraken(https://www.kraken.com/help/api)描述的一般用法是:

API-Key = API密钥

API-Sign=使用HMAC-SHA512
( URI path + SHA256( nonce + POST data ) )base64解码的秘密API密钥的消息签名

nonce=始终增加无符号64位整数
otp=双因素密码(如果启用了双因子,否则不需要)

但是我面临以下回应:

{"error":["EAPI:Invalid key"]}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几种方法(获取新的API,尝试更改sha256方法,因为我认为它的散列方式有问题)

所以这是代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;

public class KrakenClient {

        protected static String key = "myAPIKey"; …
Run Code Online (Sandbox Code Playgroud)

java api trading sha256

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

获取文件SHA256哈希码和校验和

以前我问了一个关于组合SHA1 + MD5 的问题,但之后我理解计算SHA1然后延迟文件的MD5并不比SHA256快.在我的情况下,4.6 GB文件大约需要10分钟,在Linux系统中使用默认实现SHA256和(C#MONO).

public static string GetChecksum(string file)
{
    using (FileStream stream = File.OpenRead(file))
    {
        var sha = new SHA256Managed();
        byte[] checksum = sha.ComputeHash(stream);
        return BitConverter.ToString(checksum).Replace("-", String.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我读了这个主题,并以某种方式根据他们所说的改变我的代码:

public static string GetChecksumBuffered(Stream stream)
{
    using (var bufferedStream = new BufferedStream(stream, 1024 * 32))
    {
        var sha = new SHA256Managed();
        byte[] checksum = sha.ComputeHash(bufferedStream);
        return BitConverter.ToString(checksum).Replace("-", String.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

但它没有这样的感情,需要大约9分钟.

然后我尝试通过sha256sumLinux中的命令测试我的文件中的相同文件,它需要大约28秒,上面的代码和Linux命令都给出相同的结果!

有人建议我阅读Hash Code和Checksum之间的区别,然后我会谈到这个解释差异的主题.

我的问题是:

  1. 是什么导致上述代码和Linux之间的这种不同sha256sum? …

c# mono checksum hashcode sha256

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

有时将错误的字节写入磁盘.硬件问题?

我使用C++ 11(VS2013)编写了一个基于UDP的传输协议.它的速度非常快 - 99.9%的时间都很棒.

在此输入图像描述

但我已经观察过几次将错误的字节写入磁盘(三星250 GB SSD 850 EVO) - 或者至少看起来如此.

这基本上是我转移6GB测试文件时会发生的事情:

  1. 该文件被拆分为较小的UDP数据包 - 大小为64K.(网络层将UDP数据报分解并重组为更大的包).
  2. 客户端将datapackage(udp)发送到服务器 - 使用AES256(OpenSSL)加密有效负载并包含数据+元数据.Payload还包含整个有效负载的SHA256哈希值 - 作为UDP校验和的额外完整性检查.
  3. 服务器接收数据包,将"ACK"包发送回客户端,然后计算SHA256哈希.哈希与客户端哈希相同 - 一切都很好
  4. 然后,服务器将包的数据写入磁盘(由于巨大的性能差异,使用fwrite而不是流).服务器一次只处理一个包 - 每个文件指针都有一个互斥锁,可以保护它不被另一个工作线程关闭,该工作线程关闭已经处于非活动状态10秒的文件放大器.
  5. 客户端接收UDP"ACK"包并重新发送未被确认的包(意味着他们没有使用它).传入ACK包的速率控制客户端的发送速度(也就是拥塞控制/ throtteling).服务器上接收的包的顺序无关紧要,因为每个包都包含一个Position值(文件中应写入数据的位置).

在传输完整个文件后,我在服务器和客户端上都对6GB文件进行了完整的SHA256哈希,但令我恐惧的是,我在过去几天观察到两次散列相同(当进行大约20次测试传输时) ).

在比较Beyond Compare中的文件后,我经常发现在服务器端有一两个位(在6 GB文件中)是错误的.

见下面的截图:在此输入图像描述

服务器代码 - 在验证DataPackage哈希后调用

void WriteToFile(long long position, unsigned char * data, int lengthOfData){

    boost::lock_guard<std::mutex> guard(filePointerMutex);

    //Open if required
    if (filePointer == nullptr){
        _wfopen_s(&filePointer, (U("\\\\?\\") + AbsoluteFilePathAndName).c_str(), L"wb");
    }

    //Seek
    fsetpos(filePointer, &position);

    //Write - not checking the result of the fwrite operation - …
Run Code Online (Sandbox Code Playgroud)

c++ hardware ram sha256

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

基于Excel公式的函数用于SHA256 / SHA512哈希运算,无需VBA或宏

到了2017年,如果安全性很重要,那么任何需要使用哈希的人都应该避免使用诸如MD5之类的“破碎”哈希。是否有人找到或创建了一种无需使用VBA或宏即可在Excel中执行更安全的SHA256或SHA512哈希的方法?

过去35,000年前使用MD5就是一个很好的例子(如本SO:不使用VBA的excel中的MD5哈希函数所示)。

避免使用VBA /宏的原因:与移动设备的兼容性,例如iOS的Excel。

旁注:原始的Stack Overflow帖子具有成功的答案,但链接无效,这是供参考的新链接:https : //tzamtzis.gr/2017/web-analytics/excel-function-md5-hashing-without-vba /

excel hash sha256 excel-formula sha512

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

如何在python中验证签名文件

背景

我已经使用openssl SHA256和私钥对文件进行了签名,如下所示:

with subprocess.Popen(
        # Pipe the signature to openssl to convert it from raw binary encoding to base64 encoding.
        # This will prevent any potential corruption due to line ending conversions, and also allows 
        # a human to read and copy the signature (e.g. for manual verification).
        'openssl dgst -sha256 -sign private.key sign_me.zip | openssl base64 > signature.sha256',
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,
        shell=True,
) as proc:
    out, _ = proc.communicate()
Run Code Online (Sandbox Code Playgroud)

要求

  1. 我需要使用signature.sha256public_key.crt确认sign_me.zip尚未修改。
  2. 兼容Python 3.2-3.4 …

ssl openssl cryptography sha256 python-3.x

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