javascript

java

python

c#

android

node.js

reactjs

c++

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

安全性-XOR加密有什么问题?

我写了一个简短的C ++程序对文件进行XOR加密,我可以将其用于某些个人文件(如果它被破解,没什么大不了的-我只是在防止随意的观看者)。 基本上,我使用ASCII密码,然后反复将密码与文件中的数据进行异或。

但是现在我很好奇:如果有人想破解它,他们将如何处理? 需要很长时间吗? 它是否取决于密码的长度(即big-O是什么)?

trans by 2020-01-17T09:19:22Z

加密-如何在Python中解密OpenSSL AES加密的文件?

OpenSSL为AES加密提供了一个流行的(但不安全-见下文!)命令行界面:

openssl aes-256-cbc -salt -in filename -out filename.enc

Python以PyCrypto软件包的形式支持AES,但仅提供工具。 如何使用Python / PyCrypto解密使用OpenSSL加密的文件?

注意

这个问题过去也涉及使用相同方案在Python中进行加密。 此后,我删除了该部分,以阻止任何人使用它。 不要再用这种方式加密任何数据,因为按照当今的标准,这些数据并不安全。 仅应使用解密,除了向后兼容性外,即没有其他选择时,不要使用其他原因。 要加密吗? 如果可以,请使用NaCl / libsodium。

trans by 2020-01-15T05:09:10Z

加密-如何隐藏或加密JavaScript代码?

这个问题已经在这里有了答案:

  • 如何混淆(保护)JavaScript? [关闭]                                     24个答案

有什么方法可以隐藏或加密JavaScript代码以防止人们查看,复制和/或修改专有程序?

trans by 2020-01-14T16:11:13Z

c#-CryptographicException“密钥在指定状态下无效。” 尝试导出X509私钥的RSAParameters时

我凝视了很长时间,由于使用了MSDN文档,我无法真正弄清楚发生了什么。 基本上,我是将光盘中的PFX文件加载到X509Certificate2中,并尝试使用公钥加密字符串,并使用私钥解密。

我为什么不解:将引用传递给string foo = DecryptRSA(ed, (x.PrivateKey as RSACryptoServiceProvider)**.ExportParameters(true)**);本身时,加密/解密有效:

byte[] ed1 = EncryptRSA("foo1", x.PublicKey.Key as RSACryptoServiceProvider);
string foo1 = DecryptRSA(ed1, x.PrivateKey as RSACryptoServiceProvider);

但是如果出口并通过string foo = DecryptRSA(ed, (x.PrivateKey as RSACryptoServiceProvider)**.ExportParameters(true)**);

byte[] ed = EncryptRSA("foo", (x.PublicKey.Key as RSACryptoServiceProvider).ExportParameters(false));
string foo = DecryptRSA(ed, (x.PrivateKey as RSACryptoServiceProvider).ExportParameters(true));

...它抛出“在指定状态下无效的密钥”。 尝试将私钥导出到string foo = DecryptRSA(ed, (x.PrivateKey as RSACryptoServiceProvider)**.ExportParameters(true)**);时出现异常。请注意,生成PFX的证书标记为可导出(即,我在创建证书时使用了pe标志)。 知道导致异常的原因是什么?

 static void Main(string[] args)
    {
        X509Certificate2 x = new X509Certificate2(@"C:\temp\certs\1\test.pfx", "test");
        x.FriendlyName = "My test Cert";

        X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
        store.Open(OpenFlags.ReadWrite);
        try
        {
            store.Add(x);
        }
        finally
        {
            store.Close();
        }

        byte[] ed1 = EncryptRSA("foo1", x.PublicKey.Key as RSACryptoServiceProvider);
        string foo1 = DecryptRSA(ed1, x.PrivateKey as RSACryptoServiceProvider);

        byte[] ed = EncryptRSA("foo", (x.PublicKey.Key as RSACryptoServiceProvider).ExportParameters(false));
        string foo = DecryptRSA(ed, (x.PrivateKey as RSACryptoServiceProvider).ExportParameters(true));
    }

private static byte[] EncryptRSA(string data, RSAParameters rsaParameters)
{
    UnicodeEncoding bytConvertor = new UnicodeEncoding();
    byte[] plainData = bytConvertor.GetBytes(data);

    RSACryptoServiceProvider publicKey = new RSACryptoServiceProvider();
    publicKey.ImportParameters(rsaParameters);
    return publicKey.Encrypt(plainData, true);
}

private static string DecryptRSA(byte[] data, RSAParameters rsaParameters)
{
    UnicodeEncoding bytConvertor = new UnicodeEncoding();

    RSACryptoServiceProvider privateKey = new RSACryptoServiceProvider();
    privateKey.ImportParameters(rsaParameters);

    byte[] deData = privateKey.Decrypt(data, true);
    return bytConvertor.GetString(deData);
}

private static byte[] EncryptRSA(string data, RSACryptoServiceProvider publicKey)
{
    UnicodeEncoding bytConvertor = new UnicodeEncoding();
    byte[] plainData = bytConvertor.GetBytes(data);

    return publicKey.Encrypt(plainData, true);
}

private static string DecryptRSA(byte[] data, RSACryptoServiceProvider privateKey)
{
    UnicodeEncoding bytConvertor = new UnicodeEncoding();

    byte[] deData = privateKey.Decrypt(data, true);
    return bytConvertor.GetString(deData);
}

为了澄清上面粗体部分的代码,将抛出:string foo = DecryptRSA(ed, (x.PrivateKey as RSACryptoServiceProvider)**.ExportParameters(true)**);

trans by 2020-01-11T10:52:25Z

安全性-有人正在存储信用卡数据-他们如何做?

安全且合法地存储信用卡信息非常困难,因此不应尝试。 我无意存储信用卡数据,但我渴望找出以下内容:

我的信用卡信息存储在世界上某些地方的服务器上。 (希望)此数据未存储在商家的服务器上,但是在某些时候,需要将其存储以验证和收费由商家提交的数据标识的帐户。

我的问题是:如果您要负责存储信用卡数据,您将使用哪种加密策略来保护磁盘上的数据? 据我所知,正在或多或少地实时检查了提交的信用卡信息。 我怀疑用于保护数据安全的任何加密密钥是否都是手动输入的,因此解密是即时进行的,这意味着密钥本身是存储在磁盘上的。 您将如何在这样的自动化系统中保护数据和密钥?

trans by 2019-12-23T14:52:18Z

加密-在压缩和加密时,应该先压缩还是先加密?

如果我要先对文件进行AES加密,然后再进行ZLIB压缩,那么压缩的效率是否会比先压缩然后再加密的效率低?

换句话说,我应该先压缩还是先加密,或者这有关系吗?

trans by 2019-11-11T11:11:19Z

数据库-安全地存储OpenID标识符和OAuth令牌

我正在创建一个Web应用程序,它将在Youtube中使用OpenID登录名和OAuth令牌。 我目前正在以纯文本格式在数据库中存储OpenID身份和OAuth令牌/令牌机密。

将这些值存储为纯文本是否不合适? 我可以对OpenID标识符使用单向加密,但是我不知道这是否必要。 对于OAuth令牌,我需要使用双向加密,因为我的应用程序需要获取会话令牌才能用于某些用途。

是否需要加密OpenID身份? 有人可以使用它来访问用户帐户吗?

trans by 2019-11-10T15:22:48Z

asp.net mvc-IsolateApps导致指定的解密密钥具有无效的十六进制字符

我在使用Authentication的MVC 4网站上工作。 该站点要求我指定计算机密钥值。 我是通过IIS接口完成此操作的,它取消选择了“在运行时自动生成”,生成了键值,并选择了“为每个应用程序生成唯一的键”

web.config条目如下所示:

<machineKey decryption="DES" decryptionKey="{hex-key value},IsolateApps" 
    validationKey="{hex-key value},IsolateApps" />;

虽然这似乎在另一个Web项目上可以正常工作,但在我现在正在使用的开发机上(在IIS-Express和IIS 7.5中)都导致“指定的解密密钥具有无效的十六进制字符”错误。

从键值中删除",IsolateApps"可以解决此问题,但是由于我在生产中需要此选项,所以我现在不想删除它,仅是为了在部署时出现此问题。

是什么赋予了? dev框是带有.net 2.0和.net 4.0的SQL 2008 R2框。

trans by 2019-11-09T02:58:30Z

java-密码线程安全吗?

很简单,可以从多个线程中使用一个javax.crypto.Cipher实例(例如Cipher.getInstance("RSA")),还是我需要将多个实例粘在ThreadLocal中?

trans by 2019-11-05T16:41:36Z

我将密码保存到注册表中时最简单的加密方式是什么?

目前,我正在使用明文文字oops !,它是一个内部程序,因此还不错,但我想做对。 写入注册表时,应该如何进行加密以及如何解密?

OurKey.SetValue("Password", textBoxPassword.Text);
trans by 2019-11-05T11:34:48Z

java-AES / CBC和AES / ECB加密后的数据大小

我想知道AES加密后的数据大小,这样我就可以避免主要出于了解大小而缓存我的后AES数据(在磁盘或内存上)。

我使用128位AES和javax.crypto.Cipherjavax.crypto.CipherInputStream进行加密。

使用各种输入大小进行的一些测试表明,如下计算的后期加密大小是正确的:

long size = input_Size_In_Bytes; 
long post_AES_Size = size + (16 - (size % 16));

但是我不确定以上公式是否适用于所有可能的输入大小。

在应用AES加密后,是否有一种方法可以计算数据的大小-事先无需缓存(磁盘或内存中的)加密数据即可知道其后加密大小?

trans by 2019-10-14T21:23:31Z

在.NET C#中存储加密密钥的最佳方法

在我们的应用程序中,我们有很多敏感的配置设置,我们将它们存储在再次加密的xml文件中。

必须在运行时解密此安全文件,并读取配置值。 但是会出现一个问题,即密钥和初始化向量在代码中进行了硬编码,因此任何人都可以使用Reflector读取它。

什么是在.NET中存储加密密钥的最佳方法是什么,以便没人能使用Reflector读取它们?

trans by 2019-10-11T01:28:41Z

我如何在.NET或JavaScript中使用MS-XCEP和MS-WSTEP从AD CS获得证书?

Active Directory证书服务提供了一种Web服务,该服务为非域连接的计算机实施MS-XCEP和MS-WSTEP来提交证书请求。

该证书可用于数字签名,加密等。

是否可以使用WSDL与这些Web服务进行交互? 我应该如何用C#或Javascript与他们互动?

trans by 2019-10-10T07:07:02Z

安全性-加密/散列数据库中的纯文本密码

我继承了一个Web应用程序,发现它在SQL Server数据库中以纯文本格式存储了300,000多个用户名/密码。 我意识到这是一件非常不好的事情。

知道我将必须更新登录名和密码更新过程以进行加密/解密,并且对系统的其余部分影响最小,因此,作为从数据库中删除纯文本密码的最佳方法,您会推荐什么?

任何帮助表示赞赏。

编辑:很抱歉,如果我不清楚,我想问的是您要加密/散列密码的过程是什么,而不是特定的加密/散列方法。

我应该:

  1. 备份数据库
  2. 更新登录名/更新密码
  3. 下班后,遍历users表中的所有记录,对密码进行哈希处理并替换每个
  4. 测试以确保用户仍然可以登录/更新密码

我想我的关注点更多是来自于庞大的用户数量,因此我想确保自己正确地做到了。

trans by 2019-10-07T04:07:14Z

c-Microsoft Crypto API禁用RSAES-OAEP密钥传输算法的使用

我正在使用CryptEncryptMessage生成PKCS#7封装的消息。 我正在使用szOID_NIST_AES256_CBC作为加密算法。

生成的消息似乎是有效的,但是它是密钥传输算法的CryptEncryptMessage,它在野外的支持有限(Thunderbird,OpenSSL SMIME Module等不支持它)。

我希望CAPI恢复为较旧的CryptEncryptMessage进行密钥传输。

有没有办法做到这一点,如果可以的话,我可以还原为低级消息传递功能,而不是使用CryptEncryptMessage,但是即使使用低级功能,我也找不到方法。

码:

CRYPT_ENCRYPT_MESSAGE_PARA EncryptMessageParams;
EncryptMessageParams.cbSize = sizeof(CMSG_ENVELOPED_ENCODE_INFO);

EncryptMessageParams.dwMsgEncodingType = PKCS_7_ASN_ENCODING;

EncryptMessageParams.ContentEncryptionAlgorithm.pszObjId = szOID_NIST_AES256_CBC;
EncryptMessageParams.ContentEncryptionAlgorithm.Parameters.cbData = 0;
EncryptMessageParams.ContentEncryptionAlgorithm.Parameters.pbData = 0;

EncryptMessageParams.hCryptProv = NULL;
EncryptMessageParams.pvEncryptionAuxInfo = NULL;
EncryptMessageParams.dwFlags = 0;
EncryptMessageParams.dwInnerContentType = 0;

BYTE pbEncryptedBlob[640000];
DWORD pcbEncryptedBlob = 640000;

BOOL retval =  CryptEncryptMessage(&EncryptMessageParams, cRecipientCert, pRecipCertContextArray, pbMsgText, dwMsgTextSize, pbEncryptedBlob, &pcbEncryptedBlob);
trans by 2019-09-25T19:34:51Z

Android数据库加密

Android使用SQLite数据库存储数据,我需要对SQLite数据库进行加密,该怎么做? 我了解应用程序数据是私有的。 但是,我需要明确加密我的应用程序正在使用的SQLite数据库。

trans by 2019-09-22T19:45:22Z

在Android中使用AES加密的最佳做法是什么?

为什么我问这个问题:

我知道有很多关于AES加密的问题,即使对于Android也是如此。 如果你在网上搜索,有很多代码片段。 但是在每一个页面上,在每个Stack Overflow问题中,我都发现了另一个具有重大差异的实现。

所以我创建了这个问题以找到“最佳实践”。 我希望我们可以收集最重要的要求列表,并建立一个非常安全的实施!

我读到了初始化载体和盐。 并非我发现的所有实现都具有这些功能。 所以你需要它吗? 它是否会增加安全性? 你是如何实现它的? 如果加密数据无法解密,算法是否应该引发异常? 或者这是不安全的,它应该只返回一个不可读的字符串? 算法可以使用Bcrypt而不是SHA吗?

我发现这两个实现怎么样? 他们还好吗? 缺少完美或一些重要的事情? 这些是安全的吗?

算法应该使用字符串和“密码”进行加密,然后使用该密码加密字符串。 输出应该是一个字符串(十六进制或base64?)。 当然,解密也应该是可能的。

什么是Android的完美AES实现?

实施#1:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;

public class AdvancedCrypto implements ICrypto {

        public static final String PROVIDER = "BC";
        public static final int SALT_LENGTH = 20;
        public static final int IV_LENGTH = 16;
        public static final int PBE_ITERATION_COUNT = 100;

        private static final String RANDOM_ALGORITHM = "SHA1PRNG";
        private static final String HASH_ALGORITHM = "SHA-512";
        private static final String PBE_ALGORITHM = "PBEWithSHA256And256BitAES-CBC-BC";
        private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
        private static final String SECRET_KEY_ALGORITHM = "AES";

        public String encrypt(SecretKey secret, String cleartext) throws CryptoException {
                try {

                        byte[] iv = generateIv();
                        String ivHex = HexEncoder.toHex(iv);
                        IvParameterSpec ivspec = new IvParameterSpec(iv);

                        Cipher encryptionCipher = Cipher.getInstance(CIPHER_ALGORITHM, PROVIDER);
                        encryptionCipher.init(Cipher.ENCRYPT_MODE, secret, ivspec);
                        byte[] encryptedText = encryptionCipher.doFinal(cleartext.getBytes("UTF-8"));
                        String encryptedHex = HexEncoder.toHex(encryptedText);

                        return ivHex + encryptedHex;

                } catch (Exception e) {
                        throw new CryptoException("Unable to encrypt", e);
                }
        }

        public String decrypt(SecretKey secret, String encrypted) throws CryptoException {
                try {
                        Cipher decryptionCipher = Cipher.getInstance(CIPHER_ALGORITHM, PROVIDER);
                        String ivHex = encrypted.substring(0, IV_LENGTH * 2);
                        String encryptedHex = encrypted.substring(IV_LENGTH * 2);
                        IvParameterSpec ivspec = new IvParameterSpec(HexEncoder.toByte(ivHex));
                        decryptionCipher.init(Cipher.DECRYPT_MODE, secret, ivspec);
                        byte[] decryptedText = decryptionCipher.doFinal(HexEncoder.toByte(encryptedHex));
                        String decrypted = new String(decryptedText, "UTF-8");
                        return decrypted;
                } catch (Exception e) {
                        throw new CryptoException("Unable to decrypt", e);
                }
        }

        public SecretKey getSecretKey(String password, String salt) throws CryptoException {
                try {
                        PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray(), HexEncoder.toByte(salt), PBE_ITERATION_COUNT, 256);
                        SecretKeyFactory factory = SecretKeyFactory.getInstance(PBE_ALGORITHM, PROVIDER);
                        SecretKey tmp = factory.generateSecret(pbeKeySpec);
                        SecretKey secret = new SecretKeySpec(tmp.getEncoded(), SECRET_KEY_ALGORITHM);
                        return secret;
                } catch (Exception e) {
                        throw new CryptoException("Unable to get secret key", e);
                }
        }

        public String getHash(String password, String salt) throws CryptoException {
                try {
                        String input = password + salt;
                        MessageDigest md = MessageDigest.getInstance(HASH_ALGORITHM, PROVIDER);
                        byte[] out = md.digest(input.getBytes("UTF-8"));
                        return HexEncoder.toHex(out);
                } catch (Exception e) {
                        throw new CryptoException("Unable to get hash", e);
                }
        }

        public String generateSalt() throws CryptoException {
                try {
                        SecureRandom random = SecureRandom.getInstance(RANDOM_ALGORITHM);
                        byte[] salt = new byte[SALT_LENGTH];
                        random.nextBytes(salt);
                        String saltHex = HexEncoder.toHex(salt);
                        return saltHex;
                } catch (Exception e) {
                        throw new CryptoException("Unable to generate salt", e);
                }
        }

        private byte[] generateIv() throws NoSuchAlgorithmException, NoSuchProviderException {
                SecureRandom random = SecureRandom.getInstance(RANDOM_ALGORITHM);
                byte[] iv = new byte[IV_LENGTH];
                random.nextBytes(iv);
                return iv;
        }

}

资料来源:[http://pocket-for-android.1047292.n5.nabble.com/Encryption-method-and-reading-the-Dropbox-backup-td4344194.html]

实施#2:

import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * Usage:
 * <pre>
 * String crypto = SimpleCrypto.encrypt(masterpassword, cleartext)
 * ...
 * String cleartext = SimpleCrypto.decrypt(masterpassword, crypto)
 * </pre>
 * @author ferenc.hechler
 */
public class SimpleCrypto {

    public static String encrypt(String seed, String cleartext) throws Exception {
        byte[] rawKey = getRawKey(seed.getBytes());
        byte[] result = encrypt(rawKey, cleartext.getBytes());
        return toHex(result);
    }

    public static String decrypt(String seed, String encrypted) throws Exception {
        byte[] rawKey = getRawKey(seed.getBytes());
        byte[] enc = toByte(encrypted);
        byte[] result = decrypt(rawKey, enc);
        return new String(result);
    }

    private static byte[] getRawKey(byte[] seed) throws Exception {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
        sr.setSeed(seed);
        kgen.init(128, sr); // 192 and 256 bits may not be available
        SecretKey skey = kgen.generateKey();
        byte[] raw = skey.getEncoded();
        return raw;
    }


    private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(clear);
        return encrypted;
    }

    private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, skeySpec);
        byte[] decrypted = cipher.doFinal(encrypted);
        return decrypted;
    }

    public static String toHex(String txt) {
        return toHex(txt.getBytes());
    }
    public static String fromHex(String hex) {
        return new String(toByte(hex));
    }

    public static byte[] toByte(String hexString) {
        int len = hexString.length()/2;
        byte[] result = new byte[len];
        for (int i = 0; i < len; i++)
            result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
        return result;
    }

    public static String toHex(byte[] buf) {
        if (buf == null)
            return "";
        StringBuffer result = new StringBuffer(2*buf.length);
        for (int i = 0; i < buf.length; i++) {
            appendHex(result, buf[i]);
        }
        return result.toString();
    }
    private final static String HEX = "0123456789ABCDEF";
    private static void appendHex(StringBuffer sb, byte b) {
        sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
    }

}

来源:[http://www.tutorials-android.com/learn/How_to_encrypt_and_decrypt_strings.rhtml]

trans by 2019-09-16T09:28:44Z

加密 - id_rsa.pub和id_dsa.pub有什么区别?

一个比另一个更安全吗?

trans by 2019-09-13T23:00:37Z

加密 - 为什么MD5哈希值不可逆?

我一直想知道的一个概念是使用加密哈希函数和值。 我知道这些函数可以生成一个唯一且几乎不可能反转的哈希值,但这是我一直想知道的:

如果在我的服务器上,在PHP中我生成:

md5("stackoverflow.com") = "d0cc85b26f2ceb8714b978e07def4f6e"

通过MD5函数运行相同的字符串时,您在PHP安装上获得相同的结果。 正在使用一个过程从一些起始值产生一些值。

这是不是意味着有一些方法来解构正在发生的事情并扭转哈希值?

这些函数是什么使得结果字符串无法回溯?

trans by 2019-09-11T06:24:25Z

java - 使用AE的Android加密/解密

在Android上如何使用AES加密和解密图像和其他文件有一个很好的例子吗?

trans by 2019-08-26T14:54:40Z

1 2 3 4 下一页 共4页