有人能指出我正确的方向吗?
我想使用JCE/JCA从主密钥中获取新密钥,我该如何实现?
问候.
在我的 ASP.NET WebForms 应用程序(该应用程序运行在 windows server 2008 R2、IIS 7.5 和 Runtime v4.0 集成模式应用程序池上,如果重要的话),我正在加密数据,将它放在 QueryString 上并使用System.Security.Cryptography.SymmetricAlgorithm类解密数据。但是我偶尔会在解密数据时遇到一些问题,我收到以下异常;
坏数据。
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。
异常详细信息:System.Security.Cryptography.CryptographicException:错误数据。
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常来源和位置的信息。
堆栈跟踪:
[加密异常:错误数据。]
System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) +33
System.Security.Cryptography.Utils._DecryptData(SafeKeyHandle hKey, Byte[] data, Int32 ib, Int32 cb, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode PaddingMode, Boolean fDone) +0
System.Security.Cryptography.CryptoAPITransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) +313
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +33 Cryptography35.SymmetricEncryptionUtility.DecryptData(Byte[] data, String keyFile) 在 E:\Documents\@Library\Cryptography35\Cryptography35\SymmetricEncryptionUtility.cs:124 Cryptography35.SymmetricedQueryString.Symmetricly ..ctor(String encryptedData, String keyfilename, String algorithmname) in E:\Documents\@Library\Cryptography35\Cryptography35\SymmetricQueryString\SymmetriclyEncryptedQueryString.cs:67 WebForms.Web.Views.purchase_a.GetSymmetriclyEncryptedQueryString() 在 E:\Documents\ WebForms.Web\Views\purchase-a.aspx.cs:35 WebForms.Web.Views.purchase_a.Page_Load(Object sender, …
我想移植这个简单的JAVA示例......
使用J2ME中的Bouncycastle示例进行AES加密/解密
...到C#并有以下两个问题:
据我了解,JAVA示例使用AESEngine进行加密/解密操作.AESEngine和AESFastEngine和AESLightEngine有什么区别?遗憾的是,我不理解文档中提供的信息:http://www.bouncycastle.org/docs/docs1.6/index.html
我想为我加密的每个文件使用新的加密密钥.我应该使用哪种分组密码操作模式:AES.CBC,AES.CFB,AES.ECB或AES.OFB http://www.bouncycastle.org/docs/docs1.6/index.html
我的假设是正确的,在我的情况下,我不必使用iv/salt(这意味着我必须使用静态iv?)因为我使用AES.KeyGen128()进行密钥生成并且只使用一次?
http://www.bouncycastle.org/docs/docs1.6/index.html
希望我的问题不会造成太多的混乱;-)但我感谢你能给我的每一个答案,澄清或反馈.
麦克风
我正在比较pycrypto和cryptography.io库中的Python实现.
from cryptography.hazmat.primitives.ciphers import Cipher, modes, algorithms
from cryptography.hazmat.backends import default_backend # http://cryptography.io
from Crypto.Cipher import AES # http://pycrypto.org
key = b'Sixteen byte key'
iv = b'Sixteen byte ivv'
cipher1 = AES.new(key, AES.MODE_CFB, iv)
cipher2 = Cipher(algorithms.AES(key), modes.CFB(iv), default_backend())
plaintext = b"Plaintext"
print(cipher1.encrypt(plaintext))
print(cipher1.decrypt(plaintext))
print(cipher2.encryptor().update(plaintext))
print(cipher2.decryptor().update(plaintext))
Run Code Online (Sandbox Code Playgroud)
MWE打印:
b'\xe4\xb4\xeb\xe3Si\x9ap\xee'
b'7\xda\x98\xee\x05\xe4\xa0\xc7,'
b'\xe4"\xd4mo\xa3;\xa9\xe0'
b'\xe4"\xd4mo\xa3;\xa9\xe0'
Run Code Online (Sandbox Code Playgroud)
为什么输出不同?
python encryption cryptography encryption-symmetric pycrypto
是否有任何文档,包括生成强大RSA密钥的技巧?
我的意思不仅是“将XXX实用程序与-X标志一起使用”。
我的意思是理论上有一些规则。例如,模块n不应小于1024位,依此类推。
有人可以告诉我吗?
AWS的S3 SDK for Ruby允许对文件进行客户端("信封")加密.它是客户端密钥的AES CBC/ECB加密的组合,其中包络密钥和初始化向量存储在元数据中.
我有一个Ruby开发人员,它已经加密了S3存储桶中的各种文件,我需要使用Python检索和解密.Python S3 AWS SDK目前没有此客户端功能.
假设使用encryption_keyRuby bucket.writeS3 API 的参数加密文件:
#!/usr/bin/ruby
# coding: utf-8
require 'aws-sdk'
require 'openssl'
access_key = '<aws_access_key>'
secret_access_key = '<secret_access_key>'
encryption_key = "passwordpassword"
s3 = AWS::S3.new
storage_host = "our_bucket"
storage_path = "prod/master_report/test.txt"
bucket_obj = s3.buckets[storage_host].objects[storage_path]
bucket_obj.write(file: 'test.txt', encryption_key: encryption_key)
Run Code Online (Sandbox Code Playgroud)
有没有办法用Python解密文件而不是使用Ruby SDK?
I am encrypting using PHP before saving the encrypted data to MySQL. I am convinced this is a better way in the long run vs using MySQL's AES_* functions.
My question now is, is there an efficient way to search encrypted data aside from storing a searchable hashed version of the data? E.g., Two columns per data: first_name_encrypted, first_name_hashed.
$hashed_search = myhash('John');
$q = "SELECT * FROM table WHERE first_name_hashed = '$hashed_search'";
Run Code Online (Sandbox Code Playgroud)
This is what I do now, is there …
我正在尝试使用以下代码段对我的 JWt 进行签名和编码:
var claims = new Claim[] { new SomeClaimes() };
var scKey = Encoding.UTF8.GetBytes("SOME KEY");
var ecKey = Encoding.UTF8.GetBytes("SOME OTHER KEY");
var tokenDescriptor = new SecurityTokenDescriptor {
Subject = new ClaimsIdentity(claims),
SigningCredentials = new SigningCredentials(
new SymmetricSecurityKey(
scKey),
SecurityAlgorithms.HmacSha512),
EncryptingCredentials = new EncryptingCredentials(
new SymmetricSecurityKey(
ecKey),
// I tryied all possible combination of algorithms here:
SecurityAlgorithms.XXXX,
SecurityAlgorithms.YYYY),
Issuer = "My Jwt Issuer",
Audience = "My Jwt Audience",
IssuedAt = DateTime.UtcNow,
Expires = DateTime.Now.AddDays(7),
};
var tokenHandler = new …Run Code Online (Sandbox Code Playgroud) 我很难提出一种可以创建简短(8个字符)引荐代码的算法。我想使用一种易于记忆的模式,在该模式中不可能在代码中出现令人反感的单词。我也不想让任何字母与数字混淆-所以不要1,l,0和O。我提出的模式是aa22aa22。此模式基本上是两个字母字符,然后是两个数字字符,然后是两个字母字符,然后是两个数字字符。字母字符均为小写。这种模式支持超过40亿种可能的代码。
现在开始棘手的部分。我需要将生成的代码存储在Salesforce中。我认为这需要以非随机的方式完成,因为如果我随机进行,则必须检查是否已经生成了代码。然后,这会进入Salesforce对您施加的限制条件限制。如果您不熟悉调控器限制,则基本上意味着您查询数据库的次数过多或进程运行的时间过长,基础系统会抛出调控器限制错误。随机代码的创建带来了不确定性,即查找与先前创建的代码不冲突的代码需要进行多少次查询。因此,现在基本上可以归结为创建保证永不重复的代码,这意味着需要按顺序创建它们。顺序方法的问题在于代码易于猜测。
是的,我可以有一个非Salesforce数据存储,它可以作为记录的来源,并采用随机方法进行冲突检查,但是我想看看全球社区是否有任何可行的想法。我试图找到一种弱对称加密算法,该算法可以产生8个字符的密码,但到目前为止我还没有运气。
我一直在尝试了解对称加密的工作原理以及如何将其集成到我的 CLI 应用程序中,但我遇到了一些我将在下面描述的问题。
我的用例如下:
我有一个CLI应用程序(SQLAlchemy+ click+ Python 3.8),这将是一个非常简单的密码管理器(自用)。
开始时,我想向用户询问主密码,以便他能够从数据库中检索任何信息。如果用户还没有主密码,我会请他创建一个。我希望所有数据都使用相同的主密钥进行加密。
为了完成上述所有工作,我认为对称加密是最合适的,因此想到了Fernet,所以我开始编写一些代码:
import base64
from cryptography.fernet import Fernet, InvalidToken
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
def generate_key_derivation(salt, master_password):
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=100000,
backend=default_backend()
)
key = base64.urlsafe_b64encode(kdf.derive(master_password.encode()))
return key
def encrypt(key, value_to_encrypt):
f = Fernet(key)
encrypted_key = f.encrypt(value_to_encrypt.encode())
return encrypted_key
def decrypt(key, encrypted_key):
f = Fernet(key)
try:
return f.decrypt(encrypted_key)
except InvalidToken:
return b''
Run Code Online (Sandbox Code Playgroud)
现在,我有点试图从文档中理解:
在这个方案中,盐必须存储在一个可检索的位置,以便将来从密码中导出相同的密钥。 …
encryption ×5
cryptography ×4
python ×3
c# ×2
.net ×1
.net-core ×1
aes ×1
amazon-s3 ×1
asp.net ×1
aws-sdk ×1
bouncycastle ×1
java ×1
jwt ×1
mysql ×1
php ×1
pkcs#5 ×1
pycrypto ×1
rsa ×1
ruby ×1
sqlalchemy ×1