标签: encryption-symmetric

我应该在 AesGcm 中使用迭代吗?

读到 RijndaelManaged 已被弃用并且AesGcm(在 .NET Core 3.1 中引入)优于AesManaged后,我尝试使用本教程和此答案来实现AesGcm

这是我的代码:

/// Perform AES Encryption, returning the result as a byte array.
/// </summary>
/// <param name="bytesToEncrypt">string, file or data represented as byte array</param>
/// <param name="passwordBytes">A unique password for the encryption (must be 32 bytes?)</param>
/// <returns>The data encrypted</returns>
public byte[] EncryptData(byte[] bytesToEncrypt, byte[] passwordBytes)
{
    // Based on /sf/ask/4262254181/#60891115

    // Get parameter sizes
    int nonceSize = AesGcm.NonceByteSizes.MaxSize;
    int tagSize = …
Run Code Online (Sandbox Code Playgroud)

c# encryption aes encryption-symmetric aes-gcm

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

加密和解密时出错.无法找到异常的原因

我有以下两种方法.

第一种方法

  //SymmetricEncryting 
 private byte[] SymmetricEncrypt()
  {
  try
      {
        //Get Byte Value 
        byte[] x= Encoding.Default.GetBytes("Test");

        byte [] y;

        //Create Symmetric Key Encription
        RijndaelManaged rijndaelManaged = new RijndaelManaged();

        //GetSymmetricPublicKey
        _symmetricPublicKey = rijndaelManaged.Key;

        //Get Symmetric Public IV
        _symmetricPublicIv = rijndaelManaged.IV;

        using (MemoryStream memoryStream = new MemoryStream(x))
        {
            //Start EncriptionProcess
            var cryptoStream = new CryptoStream(memoryStream,
                                                rijndaelManaged.CreateEncryptor
                                                 (_symmetricPublicKey,
                                                 _symmetricPublicIv),
                                                CryptoStreamMode.Write);

            cryptoStream.Write(x, 0, x.Length);

            // Complete the encryption process
            //cryptoStream.FlushFinalBlock();

            y= memoryStream.ToArray();


        }

        return y;
    }
    catch (Exception)
    {
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

第二种方法

private string …
Run Code Online (Sandbox Code Playgroud)

.net c# cryptography encryption-asymmetric encryption-symmetric

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

在URL中包含加密密码?可能?

我们有一个典型的基于Web的登录系统.我们希望客户能够生成一个永不过期的"登录链接",并包含他们的密码.因此,我们希望创建一个包含加密形式密码的链接.注意:我知道最好的方法是查找表,其中每个链接都有一个唯一的密钥......我不会讨论为什么这对我们不起作用; 它不会.

我不熟悉公钥加密.也许这就是我需要的东西?

这就是我在想的.这仍然可能还不够,所以请告诉我:

定义:user-password是指链接中加密形式的用户密码.

我们不能对所有用户密码使用一个加密密钥,因为可以通过生成大量链接来导出加密密钥,因此......

  • 使用标准形式的对称加密.

  • 服务器具有包含1000个复杂加密密钥的文本文件.

  • 当生成链接时(使用具有该列表的PHP脚本),选择1000个加密密钥中的一个加密其明文密码(按顺序选择,不是随机选择以防止在同一时间选择相同的密码) .

  • 在加密用户密码之前,在其开头添加"s345lm34l5k342342343534432324sdfs"等内容,以"加密"它.(例如:password1变为s345lm34l5k342342343534432324sdfspassword1)."Salting"使得解密字典攻击变得更加困难.这种盐是保密的.但是,当然,它存在风险,它可以被破坏,它是所有密码的一个盐,所以......

  • 此外,密码中还添加了第二个随机生成的盐.此盐使用单个强密码加密.因为salt和密码加密它是一个随机的字节模式,所以它更难确定盐.

  • 链接制作工具只允许您每10分钟生成15个链接,然后锁定IP.

  • 链接制作工具不会生成链接,除非提供给它的用户/密码实际上是一个正常运行的用户/密码组合.这样,如果某人只是尝试生成链接以确定加密信息,那么它将无法正常工作.理论上,他们仍然可以获得有效的用户/密码并尝试暴力破解.

这样安全吗?

encryption encryption-symmetric

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

base64 InvalidKeyException:密钥长度不是 128/192/256 位

我正在尝试使用 Base64 加密 editText 字符串,wnich 将保存在共享首选项中,但是一旦字符串被编码并保存,我的 .xml 文件就是空白的。我是一名新手程序员,对加密非常陌生,所以我迷路了,不知道如何正确分析我的代码以确定可能非常简单的问题。我收到了一些建议,但没有任何内容清楚地表明问题出在哪里,为什么它不起作用,以及如何解决它。我怀疑我的加密方法,但不确定在哪里。对于试图保护用户名和密码条目的编码人员来说,这必须是一项常见任务。本教程用于此加密项目单击此处

这是用于编码、加密和保存 EditText 字符串的类:

public void onClick(View arg0) {
    user=rName.getText().toString().trim();
    pass=rPwd.getText().toString().trim();

    if(arg0==regBttn){     
       if((user.length()!=0))
        {
          if((pass.length()!=0))
        {

        sp=getSharedPreferences("AccessApp",MODE_WORLD_WRITEABLE);
        Editor myEditor=sp.edit();

        byte[] key = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6 };

        try {
             String encryptedUser = encrypt(user, key);  
             myEditor.putString("USERNAME_KEY", encryptedUser); 
        }
     catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
    try {
             String encryptedPass = encrypt(pass, key);  
             myEditor.putString("PASSWORD_KEY", encryptedPass); 

    } …
Run Code Online (Sandbox Code Playgroud)

base64 android exception encryption-symmetric sharedpreferences

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

可恢复密码的推荐加密方法

我有一个应用程序,需要保留多个用户密码,并要求它们是可恢复的.

我正在考虑使用主密码加密密码+另一种加密机制.

加密的密钥将保存在外部系统中,并可使用API​​进行检索.事情是我不确定是否:

  1. 这种方法足够安全
  2. 我应该选择哪种附加机制进行加密.

谢谢.

编辑--------------我知道它已经关闭......但我确实想澄清 - 我必须有能力解密,这是我的应用程序中的一个主要部分...据说我觉得我用AES算法得到了答案.我不需要哈希,因为哈希是不可逆转的

php java encryption encryption-symmetric

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

ASP.NET中的加密,可以使用AES_DECRYPT()在MySQL中解密

我希望能够在ASP.NET中执行应用程序级加密,生成一个字节数组,然后将其保存到MySQL blob列.我希望它是一个选项,如果你有加密密钥,你将能够使用MySQL的AES_DECRYPT()函数解密它.这似乎应该是可能的,因为AES_DECRYPT是AES/Rijndael的实现.

MySQL AES_ENCRYPT/DECRYPT函数只需要一个密钥和字符串来加密/解密为参数.但是,我在ASP.NET/C#中看到的用于加密的示例还涉及指定Key和IV(初始化向量)的值.这些如何影响最终的加密字节数组,以及在使用AES_DECRYPT解密时如何将它们考虑在内?

c# mysql asp.net encryption encryption-symmetric

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

我需要什么类型的加密?

好的,最初的任务是在2个能够共享用户cookie的"友好"网站中跟踪用户(比方说,我有example.com,我的朋友有mysite.com,而且他有一个域simple.example. com所以他可以在.example.com上设置cookie.

要跟踪我们想要设置唯一cookie的用户活动,此cookie应该是唯一的并且长度为32个字节(ascii).从这个角度来看非常简单,可以这样实现:

md5(microtime)
Run Code Online (Sandbox Code Playgroud)

就是这样,但现在我们有了新的约束:

  1. 我们应该能够告诉谁确切地设置了cookie:exmaple.com引擎或mysite.com引擎

  2. 仍然需要32个字节的长度

  3. 我们应该能够加密时间戳(发布cookie时)

  4. 结果cookie值的第一个和最后一个字符应该不同,所以我们可以根据cookie进行A/B测试(所以我们总是可以说,如果cookie的最后一个字符是"> K",则显示此用户"功能A")

鉴于结果字符串的长度应始终为32个或更少,并且数据应加密和解密(当然不是用户),并且字符串对于用户应该是唯一的,这使得任务非常复杂.

我的想法和问题:

  • 我们应该使用对称密钥加密(解决约束 1和3),但是在这种情况下我们如何确保结果字符串不超过32个字符(约束 2)?

  • 考虑到我们需要加密的数据量是:时间戳和微秒(14字节),站点发布者标志(1字节)=总共15字节,还有其他解决方案吗?

我的第一个想法是将数据打包成二进制字符串而不是base64编码.结果将是8-chars长base64编码的字符串:

def encode():
    base64( pack('Lv', timestamp, microseconds) )
Run Code Online (Sandbox Code Playgroud)

在开头和结尾添加site-issuer标志和字符:

def getCookie():
    rand('a'...'Z') + encode() + issuerFlagChar() + rand('a'...'Z')
Run Code Online (Sandbox Code Playgroud)

因此,结果是11个字符长,我们很容易满足约束2.

但问题是:这个算法肯定不安全,我不确定数百万网站用户的结果字符串是否是唯一的.

我想知道我是否可以为此目的使用DES或AES,但我不确定结果字符串是否总是满足约束2(结果字符串不应超过32个ascii字符).

是否存在对称密钥算法,以确保"如果使用M字节密钥加密N个字节,那么结果数据长度为Math.Ceil(N*2 + 1/M)字节"?因此产生的长度是可预测的?

encryption des aes encryption-symmetric

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

将AES解密从CryptoJS移植到Php

我正在尝试将AES解密函数从JavaScript转换为PHP脚本.忽略缩进以便于阅读.

var enc = 'EK/tvL3RsjOY1j82ILXv7W10bEU83JeaiBhlLmcZIrk=';

var key = 'FSHcT+sfRO/siok2ooweuA==' ;

var y = CryptoJS.AES.decrypt({ciphertext:     CryptoJS.enc.Base64.parse(enc)}, 
CryptoJS.enc.Base64.parse(key), 
{iv: CryptoJS.enc.Hex.parse("2323232323232323")});

var dec = y.toString(CryptoJS.enc.Utf8);
Run Code Online (Sandbox Code Playgroud)

在PHP中我试过了

$iv = mcrypt_create_iv(16, '2323232323232323'); 

$enc = 'EK/tvL3RsjOY1j82ILXv7W10bEU83JeaiBhlLmcZIrk=';

$key = 'FSHcT+sfRO/siok2ooweuA==' ;

$dec = rtrim((mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $enc, MCRYPT_MODE_CBC, $iv)), "\0\3");
Run Code Online (Sandbox Code Playgroud)

在Javascript解密工作正常,但当我执行PHP它给我奇怪的字符.

javascript php encryption aes encryption-symmetric

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

AES填充模糊

我一直在用C语言实现AES,现在我正在通过实现填充来完成程序.阅读关于填充主题的许多其他SO问题我发现,一种流行的方法是通过填充州内剩余的每个地方剩下的地方数量.例如,如果我只有12个字节要加密,我会用4填充剩余的4个字节.我的问题是在解密时如果我有一个已满但是以1结尾的块,我怎么知道这是否是一个字节的填充或只是值1?

免责声明:我知道这个程序永远不应该用于生产,因为它可能有各种不同的不安全感.我这样做是为了好玩,而不是加密绝密文件.

encryption aes padding encryption-symmetric

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

perl加密脚本IDEA

大家好我正在制作一个perl脚本来加密和解密文本,我刚刚开始我有这个:

#!/usr/bin/perl

use Crypt::IDEA;

my $key = pack("H32", "0123456789ABCDEF0123456789ABCDEF");
my $cipher = new IDEA $key;
my $palabra= "plaintex";
my $ciphertext = $cipher->encrypt($palabra);  # NB - 8 bytes

print unpack("H16", $ciphertext), "\n";

my $plaintext = $cipher->decrypt($ciphertext);

print $plaintext , "\n";
Run Code Online (Sandbox Code Playgroud)

麻烦的是加密的文本必须是8个字节的长度.为什么?如果我把"明文"代替"plaintex"给我错误.

input must be 8 bytes long at /usr/lib/perl5/site_perl/Crypt/IDEA.pm line 62.
Run Code Online (Sandbox Code Playgroud)

linux encryption perl encryption-symmetric

0
推荐指数
1
解决办法
886
查看次数