我正在尝试使用GPG(目前为v 1.4.10)来执行对称加密/解密过程的一些自定义软件.我当前的加密命令如下所示:
gpg --batch --no-tty --no-use-agent --symmetric --cipher-algo AES256 --passphrase "foobar" /path/to/file_to_be_encrypted
Run Code Online (Sandbox Code Playgroud)
如果没有该--no-use-agent选项,我会收到臭名昭着的错误消息
gpg-agent在此会话中不可用
我担心转移到gpg2,因为根据文档,gpg-agent总是需要的,而且--no-use-agent只是一个虚拟选项.我的gpg调用通过守护进程在后台发生,所以这是一个非代理方案(加上它是对称的,我根本不需要代理).
这个详细程度的文档很少,所以我正在寻找用户体验.gpg2是否更紧密地合并了代理,因此我不必担心它的可用性?
我需要安全地加密/解密n长度的文件,理想情况下使用Rijndael,但绝对是256位加密.
我以前玩过加密,并且非常高兴地加密/解密字符串和字节数组.但是,因为我不知道文件的大小(并且所讨论的文件可能非常大(~2.5gb)非常可行,我不能将它们加载到字节数组中并对它们进行加密/解密像我以前一样受限制.
因此,经过对Google的一些阅读后,我知道答案是以块的形式加密和解密文件,因此我生成了以下代码:
private static void Enc(string decryptedFileName, string encryptedFileName)
{
FileStream fsOutput = File.OpenWrite(encryptedFileName);
FileStream fsInput = File.OpenRead(decryptedFileName);
byte[] IVBytes = Encoding.ASCII.GetBytes("1234567890123456");
fsOutput.Write(BitConverter.GetBytes(fsInput.Length), 0, 8);
fsOutput.Write(IVBytes, 0, 16);
RijndaelManaged symmetricKey = new RijndaelManaged() { Mode = CipherMode.CBC};
ICryptoTransform encryptor = symmetricKey.CreateEncryptor(passwordDB.GetBytes(256 / 8), IVBytes);
CryptoStream cryptoStream = new CryptoStream(fsOutput, encryptor, CryptoStreamMode.Write);
for (long i = 0; i < fsInput.Length; i += chunkSize)
{
byte[] chunkData = new byte[chunkSize];
fsInput.Read(chunkData, 0, chunkSize);
cryptoStream.Write(chunkData, 0, chunkData.Length);
}
cryptoStream.Close();
fsInput.Close();
fsInput.Dispose();
cryptoStream.Dispose(); …Run Code Online (Sandbox Code Playgroud) 我发现和阅读的关于在数据库中正确存储密码的大部分信息都说我应该为每个用户散列具有唯一salt值的密码明文,然后将该散列存储在数据库中.但是这个过程对我的需求不起作用......
我有一个用C#编写的Windows服务,需要使用特定的服务帐户连接到不同数据中心的其他远程机器.这些服务帐户就像域用户帐户,但它们背后没有真正的人,他们只具有在每个特定服务器上执行服务有效负载的适当权限.服务帐户信息存储在SQL Server表中,包括每个帐户的密码.目前,我使用对称加密(Rijndael)来模糊数据库表中的密码.密钥保存在具有严格访问权限的单独配置文件中.
每次服务具有在远程计算机上运行的计划有效负载时,我在表上查找相应的服务帐户信息并使用密钥对其进行描述.还有一个内部网站,基本上是管理此服务的各种设置的前端,在那里管理员可以查看和更改服务帐户的密码.
这是保持安全的好方法吗?这个计划有明显的缺陷吗?
似乎最常见的像keyczar,cryptlib和NaCl不适用于Ruby.什么是一些高级库的ruby库(或绑定),其中已经为您做出了有关加密原语的决策(无需生成IV,CBC与EBC等).我确实找到了ruby-gpgme.还有libmcrypt支持流的对称加密,这是我最感兴趣的.
我正在寻找实现加密系统的库,并且有兴趣使用NaCl:网络和密码学库,特别是盒子功能.显然,它使用对称加密XSalsa20,Curve25519用于公共 - 私有密码术,Poly1305用于身份验证作为它的原语.
但是,文档看起来在使用它们的方式上是不够的.例如,它提到计算密钥时它使用发送者的私钥和接收者的公钥来计算密钥.但它没有解释如何.任何人都可以对此有所了解吗?
如果我使用相同的公钥和私钥,我将不会在下次尝试时生成相同的密钥,这将是灾难性的.有没有人知道它背后的解释,或者让我了解一些关于函数如何工作的文档,而不是如何使用这些函数?
encryption cryptography encryption-asymmetric encryption-symmetric nacl-cryptography
我正在研究在我正在开发的一些应用程序的前端使用Chrome应用程序的可行性.(顺便说一句,如果有人对此有任何想法 - 请将其写在评论中)
我将使用chrome.socket并希望连接是安全的,因此需要RSA和AES加密,这将与尽可能多的后端技术实现兼容(C#,Java,...).我的意思是不同的模式,密钥长度,特定于实现的细节......
现在我自己做了一些搜索,发现https://code.google.com/p/crypto-js/用于AES加密.这仍然是可以使用的库,还是有另一个?
...但是,我找不到RSA的库?
在安全性方面,我不认为这是一个问题,因为这是一个Chrome扩展,因此HTML/JavaScript不是通过互联网发送的,但是我还有其他任何安全隐患吗?
javascript encryption-asymmetric encryption-symmetric google-chrome-app
在我的应用程序中,我使用secretKey加密和解密数据.为此,我使用AES算法.但我在解密时遇到异常,使用密钥在三个已经加密的值中有一个值.
例外情况是:
Illegal Block Size Exception Input length must be multiple of 16 when decrypting with padded cipher.
Run Code Online (Sandbox Code Playgroud)
以下是我的代码:
功能来加强价值
public static String symmetricEncrypt(String text, String secretKey) {
BASE64Decoder decoder = new BASE64Decoder();
byte[] raw;
String encryptedString;
SecretKeySpec skeySpec;
BASE64Encoder bASE64Encoder = new BASE64Encoder();
byte[] encryptText = text.getBytes();
Cipher cipher;
try {
raw = decoder.decodeBuffer(secretKey);
skeySpec = new SecretKeySpec(raw, "AES");
cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
encryptedString = bASE64Encoder.encode(cipher.doFinal(encryptText));
}
catch (Exception e) {
e.printStackTrace();
return "Error";
}
return encryptedString;
} …Run Code Online (Sandbox Code Playgroud) 我尝试使用pyDes和Crypto.Cipher.DES模块实现DES算法.我发现了一个问题,当我用82514145密钥加密然后解密密码93505044我可以检索解密的文本.我发现256个键表现得像这样.这违反了密码学.我的代码如下:
from Crypto.Cipher import DES
plain_text = 'asdfghij'
print 'plain Text: ', plain_text
des = DES.new('82514145', DES.MODE_ECB)
cipher_text = des.encrypt(plain_text)
print 'the cipher text is ', cipher_text
des = DES.new('93505044', DES.MODE_ECB)
print 'the decrypted text is: ', des.decrypt(cipher_text)
Run Code Online (Sandbox Code Playgroud)
输出是:
plain Text: asdfghij
the cipher text is @?Z????
the decrypted text is: asdfghij
Run Code Online (Sandbox Code Playgroud)
我的工作有什么不对吗?我也用pyDes得到了相同的结果.
多年来,我一直在我的php应用程序中大量使用mcrypt,无论是在win/IIS还是在linux上.虽然我在我的linux服务器上运行PHP 5.4.28,但我刚刚在Windows 8.1 IIS框中升级到PHP 5.6.11.并且mcrypt不再有效.它不会抛出我能看到的任何错误; 它只是不起作用.这是我的加密功能:
function Encrypt($text){
global $salt;
if($text != "")
return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
else
return "";
}
Run Code Online (Sandbox Code Playgroud)
这在我的Linux服务器上工作正常,但在我的本地Windows框中返回空白.根据我的阅读,mcrypt内置于php 5.6 for windows中,因此不应该使用扩展或ini文件.
我错过了什么?
我需要加密将存储在数据库中的聊天消息。数据是一串不同长度的字符。我想使用本机 node.js 加密库并使用对称加密协议,例如 AES 256。我担心以下问题:
TEXT?// AES RFC - https://tools.ietf.org/html/rfc3602
const crypto = require('crypto');
const algorithm = 'aes-256-cbc';
// generate key with crypto.randomBytes(256/8).toString('hex')
const key = '6d858102402dbbeb0f9bb711e3d13a1229684792db4940db0d0e71c08ca602e1';
const IV_LENGTH = 16;
const encrypt = (text) => {
const iv = crypto.randomBytes(IV_LENGTH);
const cipher = crypto.createCipheriv(algorithm, Buffer.from(key, 'hex'), iv);
let encrypted = cipher.update(text);
encrypted = Buffer.concat([encrypted, cipher.final()]);
return `${iv.toString('hex')}:${encrypted.toString('hex')}`;
};
const decrypt = (text) => {
const [iv, …Run Code Online (Sandbox Code Playgroud)