标签: 3des

iPhone 3DES加密密钥长度问题

我一直用这个把头撞在墙上.我需要对我的iPhone应用程序进行编码,以便在ECB模式下使用3DES加密4位"引脚",以便传输到我认为是用.NET编写的Web服务.

+ (NSData *)TripleDESEncryptWithKey:(NSString *)key dataToEncrypt:(NSData*)encryptData {
NSLog(@"kCCKeySize3DES=%d", kCCKeySize3DES);
char keyBuffer[kCCKeySize3DES+1]; // room for terminator (unused)
bzero( keyBuffer, sizeof(keyBuffer) ); // fill with zeroes (for padding)

[key getCString: keyBuffer maxLength: sizeof(keyBuffer) encoding: NSUTF8StringEncoding];

// encrypts in-place, since this is a mutable data object
size_t numBytesEncrypted = 0;

size_t returnLength = ([encryptData length] + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);

// NSMutableData* returnBuffer = [NSMutableData dataWithLength:returnLength];
char* returnBuffer = malloc(returnLength * sizeof(uint8_t) );

CCCryptorStatus ccStatus = CCCrypt(kCCEncrypt, kCCAlgorithm3DES , kCCOptionECBMode,
                                 keyBuffer, kCCKeySize3DES, …
Run Code Online (Sandbox Code Playgroud)

iphone encryption 3des

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

如何在C#中使用三重DES进行ISO 9797-1 MAC?

我有一个项目,规定了24字节数据块的以下加密规则.

1)密码学应使用9797-1中定义的全三重DES MAC算法作为MAC算法3进行,输出变换3没有截断,而CBC模式下的DES作为ICV设置为零的分组密码.最后8个字节的加密数据构成了我们需要的值.

该程序说加密完成是错误的.为了符合上述规格,我还需要做其他事吗?

数据是一个24字节的值,加密的输出应该是8个字节,我猜(根据规范).我得到整个24字节作为输出:(

我编写了以下代码来实现上述规范:

des.KeySize = 128;
des.Key = ParseHex(key);
des.Mode = CipherMode.CBC;
des.Padding = PaddingMode.None;

ICryptoTransform ic = des.CreateEncryptor();

CryptoOutput = ic.TransformFinalBlock(CryptoOutput, 0, 24);
Run Code Online (Sandbox Code Playgroud)

我也尝试了这个:

MACTripleDES des = new MACTripleDES(ParseHex(key));
byte[] CDCryptp = des.ComputeHash(CryptoOutput);
Run Code Online (Sandbox Code Playgroud)

c# hash 3des cryptography des

6
推荐指数
2
解决办法
8338
查看次数

PHP等效于Java Triple DES加密/解密

我试图使用PHP mcrypt函数解密由Java Triple DES函数加密的密钥,但没有运气.在下面找到java代码

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;


public class Encrypt3DES {

     private byte[] key;
     private byte[] initializationVector;

    public Encrypt3DES(){

    }

    public String encryptText(String plainText, String key) throws Exception{

         //----  Use specified 3DES key and IV from other source --------------
        byte[] plaintext = plainText.getBytes();
        byte[] myIV = key.getBytes();
        byte[] tdesKeyData = {(byte)0xA2, (byte)0x15, (byte)0x37, (byte)0x08, (byte)0xCA, (byte)0x62,
        (byte)0xC1, (byte)0xD2, (byte)0xF7, (byte)0xF1, (byte)0x93, (byte)0xDF,
        (byte)0xD2, (byte)0x15, (byte)0x4F, (byte)0x79, (byte)0x06, (byte)0x67,
        (byte)0x7A, (byte)0x82, (byte)0x94, (byte)0x16, (byte)0x32, (byte)0x95};

        Cipher c3des = …
Run Code Online (Sandbox Code Playgroud)

php java 3des tripledes

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

在Ruby中加密/解密3DES

我有一个key.bin文件,其内容类似于:

-12, 110, 93, 14, -48, ...
Run Code Online (Sandbox Code Playgroud)

服务使用它来解密3DES内容,但我需要通过Ruby加密它.

我已经尝试了大量的场景,如何设置密钥以及如何处理它,但是到目前为止无济于事:

  • 尝试拆分密钥,并将每个数字转换为十六进制,连接十六进制值以生成密钥
  • 尝试将数字字符串转换为二进制
  • 尝试将生成的十六进制转换为二进制

我认为我需要做的事情很简单:

des = OpenSSL::Cipher::Cipher.new('des3')
des.decrypt
des.key = mistery # this step is where i'm having problems at
final = des.update(encrypted) + des.final
Run Code Online (Sandbox Code Playgroud)

关于我应该用这个键做什么的任何想法?

关键样本:

-62,-53,124,-110,37,-88,-48,31,-57,93,70,-101,44,69,-88,-57,-123,-99,118,-119,110,55,11,14
Run Code Online (Sandbox Code Playgroud)

数据样本:

NEb2b9sYXgod6mTvaRv+MRsTJvIiTTI9VjnDGcxjxcN5qBH7FXvxYI6Oj16FeKKsoQvjAmdju2SQ
ifJqPJTl97xeEbjdwm+W8XJnWs99ku85EznVBhzQxI1H2jPiZIcrqIVCWdd/OQun7AjK4w2+5yb7
DPN2OiCIEOz2zK6skJrBw3oTEHpXrSEhydOYxqI+c5hC4z3k5nktN6WSVLIo8EAjwenHPMDxboWF
ET8R+QM5EznVBhzQxI1H2jPiZIcrqIVCWdd/OQun7AjK4w2+5yb7DPN2OiCIFqk4LRwEVq16jvKE
vjz6T4/G34kx6CEx/JdZ1LdvxC3xYQIcwS0wVnmtxorFm4q5QQFHzNKQ5chrGZzDkFzAogsZ2l2B
vcvlwgajNGHmxuVU83Ldn1e5rin7QqpjASqeDGFQHkiSbp4x6axVce2OGgfFpZdzCM7y6jLPpOlX
LOC/Bs1vTwMzcBNRB/Fo4nsX9i4It8Spm228XQNUpQe4i9QGe/4AyKIhHoM8DkXwPZ6rWp0W0UMe
keXjg41cED1JwjAAQSP3RYITB78bu+CEZKPOt2tQ2BvSw55mnFcvjIAYVQxCHliQ4PwgceHrnsZz
5aagC0QJ3oOKw9O0dlkVE3IM6KTBMcuZOZF19nCqxMFacQoDxjJY8tOJoN0Fe4Boz2FPyuggfLz9
yhljVJhxqOlTd8eA34Ex8SdC+5NDByAMumjzcPcXL8YVpSN85gytfd+skXhz3npmJ0dmZZOouu0Z
vMmlaCqw96Sy0L1mHLKbjqmZ/W57OBNRB/Fo4nsX9i4It8Spm228XQNUpQe4i9QGe/4AyKIhHoM8
DkXwPZ5tXdq1dRG6IaS51oNzFFlOoP3wTJuOTpj+zQOBMMOi4ENFyyEwYbG/qE+uY8rVwBOUHv9b
Yd9byvOZbnHDuf4oaWRZ+4K3s2NkEblDF9wU6Mb0ZqnLEJsypjrorH1cNIodIDu8nME1nD5bIDF6
XNrWC6pk6AV6eYQvNJw2QDz0RBD15fz/fAXCvbaCLDnhBKpLXrRbQdV+jxx2ipeC2ceMLLRFRPuR
B+ycYht65lWh4jNjoEsBXGFKiT0bSX6Lx/ZQD3twJWbML8ifRhw7SW0jOkUF+dAfXYNaD6nqA6Xq
TkcsDGaJsVq8wwCIWNh6tDRSw7ba4c391147kmnqEgXdKmmnEzUfHtpRw88C0/u0qj809hB4qB0B
lxj/87aDo4VOz9S4jjtk849CxtA/a9+532A4YlXjsPt/f0KZ2drAGEr1VSWzaLh/sMwP5tznmPaK
uozS6C74gMNdhtNMFz0HONcYecS0hg4lrdRyljROgzC33QoBIHbQXJrG0OXE3+81uhJwusEnFaD9
8Eybjk6YeNk3oxL3C5fx/xXgFmhcLLGdxRe/am0jqA1gV6MyQFUKtzdnNOUYpHkYXT9Ea7YYln4Q
D96Z9AI5EznVBhzQxI1H2jPiZIcrqIVCWdd/OQun7AjK4w2+5yb7DPN2OiCIFqk4LRwEVq16jvKE
vjz6T4/G34kx6CEx/JdZ1LdvxC3iEcYTrEH9kKhPrmPK1cATlB7/W2HfW8rzmW5xw7n+KGlkWfuC
t7NjZBG5QxfcFOjG9GapyxCbMqY66Kx9XDSKHSA7vJzBNZw+WyAxelza1guqZOgFenmElSgtUOo7
TEunuphaMIEQgo0udojG6dm2FtRmA4yntNCnCDzGTY72nrFBz3EZmVXGEm6X3Xd5Ito=
Run Code Online (Sandbox Code Playgroud)

ruby encryption 3des

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

使用 3DES 的图像加密

我正在使用 3DES 对图像进行加密和解密。加密图像后,我无法看到加密的图像。谁能告诉我为什么会发生这种情况?我正在使用 jpeg 图像进行加密。所有这些过程都是用Java完成的。

encryption 3des

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

Python des-ede-cbc 等效项

我目前在 PHP 中对 3DES (des-ede-cbc) 进行加密和解密,如下所示:

php > $key = '0000000000000000';
php > $iv = '00000000';
php > $plaintext = '1234567812345678';
php > $ciphertext = openssl_encrypt($plaintext, 'des-ede-cbc', $key, 0, $iv);
php > echo $ciphertext;
LEvEJf9CI+5VTVNeIjARNamKH+PNTx2P

php > $plaintext = openssl_decrypt($ciphertext, 'des-ede-cbc', $key, 0, $iv);
php > echo $plaintext;
1234567812345678
Run Code Online (Sandbox Code Playgroud)

我需要能够获取密文并在 python 中解密它。我发现的最接近的是 pycrypto: https: //gist.github.com/komuw/83ddf9b4ae8f995f15af

我的尝试:

>>> key = '0000000000000000'
>>> iv = '00000000'
>>> cipher_decrypt = DES3.new(key, DES3.MODE_CBC, iv)
>>> plaintext = cipher_decrypt.decrypt('LEvEJf9CI+5VTVNeIjARNamKH+PNTx2P')
>>> plaintext
b']v\xdf\xa7\xf7\xc0()\x08\xdf\xcb`4\xa7\x10\x9e\xaf\x8c\xb6\x00+_\xb3?2\x1d\\\x08\x01\xfa\xf2\x99'
Run Code Online (Sandbox Code Playgroud)

我不确定它有什么不同。它是 CBC 模式的 …

php python 3des

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

什么是.NET中的"openssl enc -a -e -salt -des3 -pass pass:abc123"?

我的.Net应用程序需要与基于Linux的系统进行通信,该系统使用以下命令行来加密其消息:

openssl enc -a -e -salt -des3 -pass pass:abc123
Run Code Online (Sandbox Code Playgroud)

如何在c#中加密/解密消息的等效代码如何?

我知道我应该在CBC模式下使用TripleDESPKCS7填充.我不知道的是我应该使用什么块大小初始化向量(IV).

另外我很困惑如何从密码中获取密钥.我应该使用PBKDF1PBKDF2,我应该使用什么盐?

所以看起来很标准的工作对我来说就是彻夜难关.有谁能够帮我?

.net openssl 3des pkcs#5

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

在C#中使用3DES加密的ColdFusion中解密字符串

我们无法解密之前使用3DES和C#加密的ColdFusion中的字符串.这是我们最初用于加密字符串的代码:

    public static string EncryptTripleDES(string plaintext, string key)
    {
    TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
    MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();
    DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(key));
    DES.Mode = CipherMode.ECB;
    ICryptoTransform DESEncrypt = DES.CreateEncryptor();
    byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(plaintext);

    string EncString = Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
    EncString = EncString.Replace("+", "@@12");

    return EncString;
    }
Run Code Online (Sandbox Code Playgroud)

我们尝试过使用这里的建议:

TripleDES加密 - .NET和ColdFusion玩得不好

..没有运气.这是我们的CF代码和错误:

  <cfset variables.theKey = "blahblah" />
  <cfset variables.theAlgorithm = "DESede/CBC/PKCS5Padding">
  <cfset variables.theEncoding = "Base64">
  <cfset strTest = decrypt(#DB.PASSWORD#, variables.theKey, variables.theAlgorithm, variables.theEncoding)>
Run Code Online (Sandbox Code Playgroud)

返回错误:尝试加密或解密输入字符串时发生错误:''无法解码字符串"blahblah"

因此,看起来它正在尝试解密密钥而不是字符串,但这并不是ColdFusion中概述解密函数的方式.有任何想法吗?

更新:尝试使用以下CF代码,但返回的错误仍然是"尝试加密或解密输入字符串时发生错误:给定最终块未正确填充."

<cfset dbPassword  = "Hx41SYUrmnFPa31QCH1ArCHN1YOF8IAL">
<cfset …
Run Code Online (Sandbox Code Playgroud)

c# asp.net coldfusion 3des

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

PKCS11 deriveKey()和encrypt()返回3DES的不同结果

我正在使用HSM和PKCS11处理密钥派生问题,目前我无法理解为什么我看到完全不同的结果取决于我是否使用deriveKey()方法而不是使用encrypt()方法.在这两种情况下,我都试图使用DESede/ECB/NoPadding算法来获得结果,但是根据我用来生成结果的方法(deriveKey与加密),我看到了不同的结果.

退一步以提供高级概述......我正在使用Global Platform使用的特定密钥派生方法来使用于智能卡的主密钥多样化.该方法以主密钥和用于导出新密钥的8字节数据(多样化数据)开始.div数据字节实际上只是使用DESede/ECB/NoPadding用主密钥加密,结果用作新导出的3DES密钥的一部分.(实际上,执行了多次加密,并将结果连接在一起形成新密钥,但这不是问题.)

我在两种情况下都验证了主密钥,验证了两种情况下的多样化数据是相同的,验证我使用相同的算法和相同的填充.我也尝试将派生密钥模板更改为DES,2DES,3DES.所有产生的结果都相似,只是长度不同.

目前我已经使用IAIK包装器(用Java编写的pkcs11包装器)实现了我的测试用例,我将在此处发布.密钥只是一个测试密钥,div数据是样本div数据,所以这里没有敏感信息.我首先在HSM中创建基本密钥,然后尝试使用多样化数据调用session.deriveKey()来获取新密钥.派生的关键字节以十六进制打印(键值不正确,基于我当前工作的实现,它在内存中而不是在HSM中导出密钥).接下来,我只是初始化会话以使用主密钥执行加密,然后加密多样化数据.这会产生预期值(再次根据工作实现进行检查).

当我使用相同的基本密钥,相同的div数据和相同的加密算法时,我正在寻找的是对这些操作产生不同结果的原因的任何了解.我不明白deriveKey()在表面下做了什么,我无法找到任何文档或源代码来阐明这一点.我必须能够使用deriveKey()方法,因为派生密钥在HSM外部不可用.

有任何见解赞赏.

Mechanism keyGenerationMechanism = Mechanism.get(PKCS11Constants.CKM_DES3_KEY_GEN);

List supportedMechanisms = Arrays.asList(token.getMechanismList());
if (!supportedMechanisms.contains(Mechanism.get(PKCS11Constants.CKM_DES3_KEY_GEN))) {
    output_.println("Mechanism not supported: DES3_KEY_GEN");
    return;
}

// This is the master key that I want to diversify
DES3SecretKey baseKeyTemplate = new DES3SecretKey();
baseKeyTemplate.getValue().setByteArrayValue(new byte[] {0x3d, 0x20, 0x5b, 0x29, (byte) 0xfd, 0x04, (byte) 0xd9, (byte) 0x89, (byte) 0xd0, (byte) 0xfd, (byte) 0x85, (byte) 0xd5, (byte) 0xf7, (byte) 0xb3, 0x31, (byte) 0xd3,
        0x3d, 0x20, 0x5b, 0x29, (byte) 0xfd, 0x04, (byte) 0xd9, (byte) 0x89});
baseKeyTemplate.getDerive().setBooleanValue(Boolean.TRUE); …
Run Code Online (Sandbox Code Playgroud)

java 3des pkcs#11 hsm

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

如何在Android上使用3DES算法?

在服务器端,密码字段的加密/解密在C#中完成.

现在,我需要在我的Android应用程序中实现相同的功能.所以,我按照本教程:http://ttux.net/post/3des-java-encrypter-des-java-encryption/如下:

    import java.security.MessageDigest; 
import java.security.spec.KeySpec; 
import java.util.Arrays; 

import javax.crypto.Cipher; 
import javax.crypto.SecretKey; 
import javax.crypto.SecretKeyFactory; 
import javax.crypto.spec.DESedeKeySpec; 
import javax.crypto.spec.IvParameterSpec; 

import org.apache.commons.codec.binary.Base64; 

public class Encrypter { 
  private KeySpec keySpec; 
  private SecretKey key; 
  private IvParameterSpec iv; 

  public Encrypter(String keyString, String ivString) { 
    try { 
      final MessageDigest md = MessageDigest.getInstance("md5"); 
      final byte[] digestOfPassword = md.digest(Base64.decodeBase64(keyString.getBytes("utf-8"))); 
      final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24); 
      for (int j = 0, k = 16; j < 8;) { 
    keyBytes[k++] = keyBytes[j++]; 
      } 

      keySpec = new …
Run Code Online (Sandbox Code Playgroud)

java android 3des

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

标签 统计

3des ×10

encryption ×3

java ×3

c# ×2

php ×2

.net ×1

android ×1

asp.net ×1

coldfusion ×1

cryptography ×1

des ×1

hash ×1

hsm ×1

iphone ×1

openssl ×1

pkcs#11 ×1

pkcs#5 ×1

python ×1

ruby ×1

tripledes ×1