标签: encryption

密码散列,盐和散列值的存储

假设您可以自由决定如何将散列密码存储在DBMS中.像这样的计划有明显的弱点吗?

要创建存储在DBMS中的哈希值,请执行以下操作:

  • 作为salt的一部分,DBMS服务器实例唯一的值,
  • 用户名作为盐的第二部分,
  • 并使用实际密码创建salt的串联,
  • 并使用SHA-256算法散列整个字符串,
  • 并将结果存储在DBMS中.

这意味着任何想要发生冲突的人都必须分别为每个用户名和每个DBMS服务器实例单独完成工作.我打算保持实际的哈希机制有点灵活,以允许使用仍在使用的新NIST标准哈希算法(SHA-3).

"DBMS服务器实例独有的值"不一定是秘密的 - 尽管它不会随便泄露.目的是确保如果有人在不同的DBMS服务器实例中使用相同的密码,则记录的哈希值会有所不同.同样,用户名也不是秘密 - 只需要密码.

首先使用密码以及用户名和"唯一值"第二个,或三个数据源的任何其他排列是否有任何优势?或者交错字符串怎么样?

我是否需要添加(并记录)随机盐值(每个密码)以及上述信息?(优点:用户可以重新使用密码,但仍然可能会在数据库中记录不同的哈希值.缺点:必须记录盐.我怀疑其优势远大于缺点.)

有很多相关的SO问题 - 这个列表不太可能是全面的:

我认为这些问题的答案支持我的算法(尽管如果你只是使用随机盐,那么'每个服务器的唯一值'和用户名组件就不那么重要了).

security encryption hash salt

38
推荐指数
4
解决办法
2万
查看次数

如何确定iPhone用户当前是否设置了密码并启用加密?

我正在编写一个需要加密数据的iPhone应用程序.我已经学会了如何通过设置NSFileProtectionComplete属性来打开文件加密.我也知道如何检查iPhone版本以确保它们运行的​​是iOS 4.0或更高版本.

我已经意识到,如果用户没有选择密码并且没有在设置>常规>密码锁屏幕上专门启用数据保护,那么数据实际上根本不受保护.

我想弹出警告并告诉用户他们必须启用密码并启用数据保护(这需要在4前iPhone上进行备份和恢复),然后如果他们没有密码则退出应用程序并启用数据保护.我无论如何都无法弄清楚这些设置的状态.我发现的所有API,例如UIApplication中的"protectedDataAvailable",如果禁用数据保护,都会成功通过.

iphone encryption data-protection core-data ios4

38
推荐指数
2
解决办法
9770
查看次数

HTTPS是否是防止开放网络中的会话劫持的唯一方法?

因此,使用Firesheep,公共Wi-Fi中的每个人现在都有一键式会话劫持工具.

它的工作方式 - 据我所知 - 它只是捕获所有流量并抓取会话cookie(因此它不会窃取密码).

根据我的理解,这也意味着HTTPS安全登录不能单独解决这个问题,因为进一步的HTTP流量将再次以明文形式包含会话Cookie.

由于NAT将会话绑定到特定IP地址是无用的,并且将其绑定到用户代理很容易欺骗.

那么100%HTTPS始终是阻止此类会话劫持的唯一方法吗?人们不能简单地嗅探整个HTTPS流量,包括握手,还是这个东西安全?(我正在考虑重播攻击,但对该领域一无所知.)

当然,不使用公共/开放式Wi-Fi网络是更好的选择,但我仍然对网站开发人员可以做些什么来保护他/她的用户感兴趣.

security encryption https session cryptography

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

InvalidKeyException:非法密钥大小 - 加密类抛出异常的Java代码 - 如何修复?

我一直在尝试使用一些有用的Java代码来加密Paypal按钮.这不是一件容易的事!即使我从Paypal获得一些代码,我也面临着错误......

所以我到目前为止,我认为最终会有所作为.

我从Paypal的网站上下载了Java.zip文件.其中有两个类 - ClientSide.java和ButtonEncryption.java

问题 -我收到了一个InvalidKeyException : Illegal key size错误.

问题
1)如何解决此问题?2)什么行代码抛出错误?

C:\jakarta-tomcat\webapps\PlanB\WEB-INF\classes>java palmb.servlets.paypal.ButtonEncryption
java.io.IOException: exception decrypting data - java.security.InvalidKeyException: Illegal key size
        at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.cryptData(Unknown Source)
        at org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(Unknown Source)
        at java.security.KeyStore.load(Unknown Source)
        at palmb.servlets.paypal.ClientSide.getButtonEncryptionValue(ClientSide.java:63)
        at palmb.servlets.paypal.ButtonEncryption.main(ButtonEncryption.java:81)
Run Code Online (Sandbox Code Playgroud)


ClientSide类

package palmb.servlets.paypal;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertStore;
import java.security.cert.CertStoreException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.CollectionCertStoreParameters;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import …
Run Code Online (Sandbox Code Playgroud)

java security encryption paypal exception

38
推荐指数
2
解决办法
11万
查看次数

为什么我的AES加密会抛出InvalidKeyException?

我目前正在研究一种使用密钥加密/解密特定文件的功能.我写了三个类,一个生成一个密钥,一个用密钥加密文件,另一个用密钥加密.

生成密钥并加密文件可以正常工作,但是当我尝试解密文件时,会在行处抛出异常c.init(Cipher.DECRYPT_MODE, keySpec);::

java.security.InvalidKeyException:缺少参数

我认为我byte[]在解密文件时将密钥流式传输给我或者出错了我做错了.

快速解释这三个类:KeyHandler创建一个AES密钥并将其存储在硬盘上.密钥/明文/加密/解密文件的名称当前是硬编码的,用于测试目的.

EncryptionHandler将磁盘上的.txt文件转换为字节,使用密钥加密文件,然后使用加密字节写入磁盘CipherOutputStream.

DecryptionHandler当然是相反的EncryptionHandler.

这是代码:

    public class KeyHandler {
        Scanner scan = new Scanner(System.in);

        public KeyHandler(){
            try {
                startMenu();
            } catch (Exception e) {
                System.out.println("fel någonstanns :)");
            }
        }

        public void startMenu() throws Exception{

            System.out.println("Hej. Med detta program kan du generera en hemlig nyckel"+"\n"+"Vill du:"+"\n"+ "1. Generera en nyckel"+"\n"+"2. Avsluta");
            int val=Integer.parseInt(scan.nextLine());
        do{ 
            switch (val){
            case 1: generateKey(); break;
            case 2: System.exit(1);

            default: System.out.println("Du måste välja …
Run Code Online (Sandbox Code Playgroud)

java encryption aes secret-key

38
推荐指数
1
解决办法
4万
查看次数

我应该使用初始化向量(IV)和我的加密吗?

是否建议我使用初始化向量来加密/解密我的数据?它会让事情更安全吗?是否需要根据具体情况进行评估?

为了将其置于实际上下文中,Win32 Cryptography函数CryptSetKeyParam允许在加密/解密之前在密钥上设置初始化向量.其他API也允许这样做.

通常建议什么,为什么?

encryption cryptography

37
推荐指数
3
解决办法
2万
查看次数

密码,盐和IV,我需要所有这些吗?

如果我使用Rijndael CBC模式,我不知道为什么我们需要盐.我的理解是,即使人们知道密码,但如果没有IV,他也无法获得数据.所以从我的角度来看,密码+ IV似乎足够安全.

我有什么不对吗?

encryption aes rijndaelmanaged

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

什么是空密钥加密?

在电影"黑暗骑士"中,蝙蝠侠构建了一些超强大的声纳监听系统,并对其进行加密,即Null Key Encryption.

我正在阅读这篇RFC但却无法理解它.它说的是这样的

但是,有些情况下只需要身份验证和完整性保护,并且不需要或不允许机密性.

最后他告诉福克斯

完成后输入您的姓名.

如果那么简单,为什么加密呢?

encryption

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

Code Golf:XOR加密

来自:加密公司
收件人:x $*sj4(就是你)

如果您选择接受它,您的任务就是用最短的击键次数创建一个程序

  • 采用两个文件名参数(命令行或标准输入),第一个是包含密钥的文件,第二个是一些消息.这两个文件都是纯文本.

  • 使用XOR加密将密钥应用于邮件,覆盖文件.

例:

输入文件:

StackOverflow很酷

键:

Code Golf

加密输出文件的十六进制转储:

0000000: 101b 0506 4b08 1909 1425 030b 1200 2e1c  ....K....%......
0000010: 4c25 2c00 080d 0a                        L%,....
Run Code Online (Sandbox Code Playgroud)

为简单起见,假设文件可以适合内存


此消息将在5 ... 4 ... 3 ... 2 ... 1中自加密...

     #####
    #### _\_  ________
    ##=-[.].]| \      \
    #(    _\ |  |------|
     #   __| |  ||||||||
      \  _/  |  ||||||||
   .--'--'-. |  | ____ |
  / __      `|__|[o__o]|
_(____nm_______ /____\____ 
Run Code Online (Sandbox Code Playgroud)

如果密钥的大小大于或等于消息的大小并且密钥是由无偏的随机过程生成的,则XOR加密是不可能破解的.见:一次性垫.所以这里没有"糟糕的加密".

encryption code-golf xor

37
推荐指数
8
解决办法
6247
查看次数

JSchException:算法协商失败

我试图通过ssh与JSch(0.1.44-1)连接到远程sftp服务器但在"session.connect();"期间 我得到这个例外:

com.jcraft.jsch.JSchException: Algorithm negotiation fail at 
com.jcraft.jsch.Session.receive_kexinit(Session.java:529) at 
com.jcraft.jsch.Session.connect(Session.java:291) at com.jcraft.jsch.Session.connect(Session.java:154)
... 
Run Code Online (Sandbox Code Playgroud)

来自JSch的日志:

INFO: Connecting to xx.xx.xx.xxport 22 
INFO: Connection established 
INFO: Remote version string: SSH-2.0-WeOnlyDo 2.0.6 
INFO: Local version string: SSH-2.0-JSCH-0.1.44 
INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256
INFO: aes256-ctr is not available. 
INFO: aes192-ctr is not available.
INFO: aes256-cbc is not available. 
INFO: aes192-cbc is not available.
INFO: arcfour256 is not available. 
INFO: SSH_MSG_KEXINIT sent
INFO: SSH_MSG_KEXINIT received 
INFO: Disconnecting from xx.xx.xx.xx port 22 
Run Code Online (Sandbox Code Playgroud)

我可以使用linux sftp命令登录远程服务器.我试图在互联网上找到任何线索,但我失败了.

linux sftp命令的调试输出:

OpenSSH_5.5p1-DAM_1.2, OpenSSL 0.9.8r …
Run Code Online (Sandbox Code Playgroud)

java encryption ssh sftp jsch

37
推荐指数
5
解决办法
10万
查看次数