标签: aes

如何在JavaScript中加密字符串并在C#中解密该字符串

我之前已经看到过这个问题,但在这些情况下,海报想要在面向公众的网站上加密某些内容(通常是网址),而且回复主要是"不要!".然而,在我的情况下,JavaScript将存储在非公共内部系统中,所以我认为我有更多的余地.类似问题的一个例子是:如何在javascript中加密url并在c#中解密 - 并且答案实际上没有回答问题.

我的"JavaScript"实际上是"SuiteScript",其定义为"SuiteScript是一种基于JavaScript的API,可让开发人员扩展NetSuite",其中NetSuite是托管的CRM软件包,因此用于加密我的字符串的任何编码都将是隐藏给每个人,除了我公司的员工(因此被认为安全隐藏).

我想做的是:

  1. 生成一个查询字符串(例如userid = guidValue&firstName = stringValue&company = stringValue&...),
  2. 使用安全方法加密(例如AES256,RSA,无论有人认为这是安全的),
  3. 在我的基于C#的网站上调用网页,在网址中传递此字符串(例如mysite.com/mypage.aspx?encStr=encryptedString)
  4. 让C#页面解密它,分离名称/值对并处理它们.

我已经google了搜索stackoverflow,但没有发现任何文章或答案,提供了两种技术都可以使用的加密方法的明确说明.有人有这样的指示吗?

javascript c# encryption aes

17
推荐指数
1
解决办法
3万
查看次数

ImportError:没有名为Crypto的模块

我刚刚开始探索Python.我正在尝试运行AES算法代码,我正面临:

ImportError:没有名为Crypto的模块.

你是如何解决这个问题的?

python aes pycrypto

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

如何使用CBC实现Java 256位AES加密

我已经阅读了以下主题并且他们帮助了一点,但我正在寻找更多信息.

如何使用BlackBerry的初始化矢量参数编写AES/CBC/PKCS5Padding加密和解密

Java 256bit AES加密

基本上,我正在做的是编写一个程序,它将加密通过TCP/IP发送的请求,然后由服务器程序解密.加密需要是AES,并且做了一些研究我发现我需要使用CBC和PKCS5Padding.所以基本上我需要一个秘密密钥和一个IV.

我正在开发的应用程序是用于手机,所以我想使用java安全包来减小尺寸.我已完成设计,但不确定IV和共享密钥的实现.

这是一些代码:

// My user name
byte[] loginId = "login".getBytes();

byte[] preSharedKey128 = "ACME-1234AC".getBytes();
byte[] preSharedKey192 = "ACME-1234ACME-1234A".getBytes();
// 256 bit key
byte[] preSharedKey256 = "ACME-1234ACME-1234ACME-1234".getBytes();
byte[] preSharedKey = preSharedKey256;

// Initialization Vector
// Required for CBC
byte[] iv ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
IvParameterSpec ips = new IvParameterSpec(iv);


byte[] encodedKey = new byte[loginId.length + preSharedKey.length];

System.arraycopy(loginId, 0, encodedKey, 0, loginId.length);
System.arraycopy(preSharedKey, 0, encodedKey, loginId.length, preSharedKey.length);

// The SecretKeySpec provides a mechanism for application-specific generation
// of cryptography …
Run Code Online (Sandbox Code Playgroud)

java encryption aes

16
推荐指数
1
解决办法
5万
查看次数

iPhone(Objective-c)和Java之间的AES差异

我整天都在试着解决这个问题......

我有一个在iPhone上运行的objective-c客户端,连接到Java服务器.iPhone正在使用AES加密数据,但我无法在服务器上解密它.我正在使用已知的密码短语和消息(单个字符串)并在iPhone上生成字节数组,使用相同的密钥和消息在Java服务器上生成比较字节数组但字节数组完全不同(因此不能在Java端解码).

客户端正在使用具有以下设置的CommonCrypto库...

数据是NSData使用dataUsingEncoding:NSASCIIStringEncoding Key 保持单词"message" 是NSData使用上述编码再次保持短语"1234567891123456".算法是kCCAlgorithmAES128 选项kCCOptionsPKCS7Padding(我相信它等同于服务器上的ECB?!)

服务器正在使用以下代码...

byte[] key = "1234567891123456".getBytes();
Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding");

SecretKeySpec k =  new SecretKeySpec(key, "AES");
c.init(Cipher.ENCRYPT_MODE, k);
byte[] encryptedData = c.doFinal("message".getBytes());
Run Code Online (Sandbox Code Playgroud)

但是encryptedData中的数据与在objective-c代码中生成的数据不匹配,字节数组完全不同.

任何人都可以看到任何明显我做错了吗?我认为设置都是一样的...... :(

  • 更新 - 根据要求....

好的,所以这里......

iPhone客户端正在加密以下字符串"消息"它使用密钥"1234567891123456"它使用初始化矢量"1010101010101010"它使用AES128,具有CBC模式(据我所知)和kCCOptionsPKCS7Padding的选项.

加密结果(使用base64编码)是UHIYllDFAXl81ZM7OZPAuA ==

服务器正在使用相同的密钥和初始化向量加密相同的字符串.它使用以下Cipher.getInstance("AES/CBC/PKCS5Padding");

加密的结果(使用base64编码)是ALBnFIHysLbvAxjvtNo9vQ ==

谢谢.

  • 更新2 - 按要求......

这是iPhone代码....

NSData *toencrypt = [@"message" dataUsingEncoding:NSASCIIStringEncoding];

NSData *pass = [@"1234567891123456" dataUsingEncoding:NSASCIIStringEncoding];

NSData *iv = [@"1010101010101010" dataUsingEncoding:NSASCIIStringEncoding];    

CCCryptorStatus status = kCCSuccess;

NSData *encrypted = [toencrypt …
Run Code Online (Sandbox Code Playgroud)

java encryption aes objective-c

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

如何解密C#中的加密MCRYPT_RIJNDAEL_256值,该值是由PHP中的mcrypt加密的?

我试图从Linux端管理的数据库表中读取Base64编码值.在该表中有一个名为first_name的列.在Linux方面,我可以通过在PHP中使用以下命令轻松解密它:

$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, "patient_fn_salt",
                       base64_decode("H6XmkH+VWvdD88THCliKJjLisGZIBk3CTNvyQMLnhpo="),
                       MCRYPT_MODE_ECB);
Run Code Online (Sandbox Code Playgroud)

但是我尽可能地尝试在C#端复制这个逻辑,而我得到的只是乱码.

我的C#代码如下,我希望你有一些建议,因为我的想法用完了:(

byte [] cipherText =
         Convert.FromBase64String("H6XmkH+VWvdD88THCliKJjLisGZIBk3CTNvyQMLnhpo=");
byte [] key = Encoding.UTF8.GetBytes("patient_fn_salt");
Array.Resize(ref key, 32);
byte [] iv = new byte[32];

string fname = Utilities.Decrypt(cipherText, key, iv);


public static string Decrypt(byte[] cipherText, byte[] Key, byte[] IV)
  {
   // Check arguments.
   if (cipherText == null || cipherText.Length <= 0)
    throw new ArgumentNullException("cipherText");
   if (Key == null || Key.Length <= 0)
    throw new ArgumentNullException("Key");
   if (IV == null || IV.Length <= 0)
    throw new ArgumentNullException("Key"); …
Run Code Online (Sandbox Code Playgroud)

php c# cryptography aes

16
推荐指数
2
解决办法
8583
查看次数

MySQL - 如何存储AES_Encrypted数据?

所以我一直在浏览互联网,并且遇到了MySQL内置函数AES_ENCRYPT.它似乎并不太难使用,但有些消息来源告诉我将加密数据存储为VARCHAR,有人说将其存储为BLOB.我应该将加密数据存储为什么?

php mysql security encryption aes

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

nodejs加密解密有什么问题?

我有以下加密数据:

U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o

解密它的传递是: password

(这是来自胡言乱语的例子)

在使用openssl的命令行中:

echo "U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o" | openssl enc -d -aes-256-cbc -a -k password

输出是:

Made with Gibberish\n

使用我的NodeJS应用程序:

  var decipher = crypto.createDecipher('aes-256-cbc', "password");
  var dec = decipher.update("U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o",
     'base64', 'utf8');
  dec += decipher.final('utf8');
Run Code Online (Sandbox Code Playgroud)

TypeError: DecipherFinal fail在这decipher.final行有以下错误.

我错过了什么吗?谢谢.

openssl cryptography aes node.js

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

AES-128的安全性如何?

似乎存在与AES-256相关的法律问题(它在Java中被禁用,Oracle在他们的UnlimitedJCE政策中告诉我,我"建议咨询"我的"出口/进口控制律师或律师以确定具体要求"之前把它重新打开,维基百科上的页面看起来也不友好.

似乎AES-128"很好"(至少负责整合JDK的人已经得出了这个结论).

那么我可以使用AES-128并对我的加密感到满意吗?除了最具资源的攻击者之外,它是否仍然足够安全,可以保护数据多年?

security cryptography aes

16
推荐指数
1
解决办法
3万
查看次数

在OpenSSL中释放/分配上下文的正确方法

我在我的程序中使用Open SSL,使用aes密码加密和解密数据.目前有一点内存泄漏,所以我正在寻找一种方法来解决这个问题.在我的加密解密例程中,我有这样的上下文

EVP_CIPHER_CTX_free(ctx);
Run Code Online (Sandbox Code Playgroud)

并创建:

EVP_CIPHER_CTX_new
Run Code Online (Sandbox Code Playgroud)

这是在示例中的OpenSSL wiki页面上

但!在MAN页面上,有使用EVP_CIPHER_CTX_cleanupEVP_CIPHER_CTX_init功能的建议.所以基本上应该正确使用的是EVP_CIPHER_CTX_new/ EVP_CIPHER_CTX_free某种方式被弃用了吗?并且EVP_CIPHER_CTX_new/ EVP_CIPHER_CTX_freeEVP_CIPHER_CTX_init/ 之间有什么大的区别EVP_CIPHER_CTX_cleanup吗?

if(!(ctx = EVP_CIPHER_CTX_new())) return -1;


  if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
  {
    EVP_CIPHER_CTX_free(ctx);
    return -1;
  }

  if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len))
  {
    EVP_CIPHER_CTX_free(ctx);
    return -1;
  }
  ciphertext_len = len;


  if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) { EVP_CIPHER_CTX_free(ctx); return -1; }
  ciphertext_len += len;


  EVP_CIPHER_CTX_free(ctx);
Run Code Online (Sandbox Code Playgroud)

c encryption openssl aes

16
推荐指数
3
解决办法
7451
查看次数

Java和Javascript之间的加密和解密将无法正常工作

编辑1

在decryptFile方法中,解密部分不会输出任何内容.

let decrypted = CryptoJS.AES.decrypt(e.target.result, CryptoJS.enc.Utf8.parse(key), {
    iv: CryptoJS.enc.Utf8.parse(iv),
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
});
Run Code Online (Sandbox Code Playgroud)


编辑2评论部分中给出 的链接部分解决了问题.它确实对跨平台进行加密和解密,但由于PBKDF2具有SHA256散列,它相当慢.我找不到只使用AES部分而不是PKBDF2部分的方法.


原文

我对Java和Javascript版本使用相同的密钥和IV.我无法解密用Java加密的Javascript中的文件,也无法解密用Javascript加密的Java文件.我需要这两个兼容彼此,但我无法弄清楚我是如何尝试解密以前用Java加密的Javascript中的文件.我已经成功地在两者之间实现了解密和加密文本,但是当我想要解密一个用Java加密的文件时,它就无法工作了.

用Java加密/解密文件:

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Test {
    private SecretKey secretKey;
    private IvParameterSpec ivParameterSpec;

    private String key = "ThisIsMyGreatKey";
    private byte[] ivKey = "ABCDEFGHabcdefgh".getBytes();

    public static void main(String[] args) {
        try {
            new Test().run();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void run() {
        ivParameterSpec …
Run Code Online (Sandbox Code Playgroud)

javascript java encryption cryptography aes

16
推荐指数
2
解决办法
1472
查看次数

标签 统计

aes ×10

encryption ×6

cryptography ×4

java ×3

c# ×2

javascript ×2

openssl ×2

php ×2

security ×2

c ×1

mysql ×1

node.js ×1

objective-c ×1

pycrypto ×1

python ×1