我之前已经看到过这个问题,但在这些情况下,海报想要在面向公众的网站上加密某些内容(通常是网址),而且回复主要是"不要!".然而,在我的情况下,JavaScript将存储在非公共内部系统中,所以我认为我有更多的余地.类似问题的一个例子是:如何在javascript中加密url并在c#中解密 - 并且答案实际上没有回答问题.
我的"JavaScript"实际上是"SuiteScript",其定义为"SuiteScript是一种基于JavaScript的API,可让开发人员扩展NetSuite",其中NetSuite是托管的CRM软件包,因此用于加密我的字符串的任何编码都将是隐藏给每个人,除了我公司的员工(因此被认为安全隐藏).
我想做的是:
我已经google了搜索stackoverflow,但没有发现任何文章或答案,提供了两种技术都可以使用的加密方法的明确说明.有人有这样的指示吗?
我刚刚开始探索Python.我正在尝试运行AES算法代码,我正面临:
ImportError:没有名为Crypto的模块.
你是如何解决这个问题的?
我已经阅读了以下主题并且他们帮助了一点,但我正在寻找更多信息.
如何使用BlackBerry的初始化矢量参数编写AES/CBC/PKCS5Padding加密和解密
基本上,我正在做的是编写一个程序,它将加密通过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) 我整天都在试着解决这个问题......
我有一个在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 ==
谢谢.
这是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) 我试图从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) 所以我一直在浏览互联网,并且遇到了MySQL内置函数AES_ENCRYPT.它似乎并不太难使用,但有些消息来源告诉我将加密数据存储为VARCHAR,有人说将其存储为BLOB.我应该将加密数据存储为什么?
我有以下加密数据:
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
行有以下错误.
我错过了什么吗?谢谢.
我在我的程序中使用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_cleanup
和EVP_CIPHER_CTX_init
功能的建议.所以基本上应该正确使用的是EVP_CIPHER_CTX_new
/ EVP_CIPHER_CTX_free
某种方式被弃用了吗?并且EVP_CIPHER_CTX_new
/ EVP_CIPHER_CTX_free
和EVP_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) 编辑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) 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