标签: blowfish

如何在C中使用Crypt :: CBC(Blowfish)解密在Perl中加密的文件?

我在Perl中有一个小型加密工具,它使用Crypt :: CBC和Blowfish来加密文件.

我想用C或C++编写解密算法......请有人帮我这样做.

c++ encryption perl blowfish

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

NSIS和PHP之间的Blowfish加密消息

对于我正在进行的项目,我需要使用Blowfish以跨NSIS和PHP的兼容方式加密和解密字符串.

目前我正在使用NSIS 的Blowfish ++插件mcryptPHP 的库.问题是,我不能让他们两个产生相同的输出.

让我们从NSIS Blowfish ++插件开始.基本上API是:

; Second argument needs to be base64 encoded
; base64_encode("12345678") == "MTIzNDU2Nzg="

blowfish::encrypt "test@test.com***" "MTIzNDU2Nzg="
Pop $0 ; 0 on success, 1 on failure
Pop $1 ; encrypted message on success, error message on failure
Run Code Online (Sandbox Code Playgroud)

没有提到它是CBC,ECB,CFB等,而且我对Blowfish不够熟悉,无法通过阅读大部分未记录的来源来讲述.我认为它是ECB,因为PHP文档mcrypt告诉我ECB不需要IV.

我还通过阅读源代码了解到Blowfish ++插件将Base64解码第二个加密参数(我不知道为什么).它还返回Base64编码的字符串.

对于PHP方面,我基本上使用此代码进行加密:

$plainText = "test@test.com***";
$cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_ECB, '');   
$iv = '00000000';  // Show not be used anyway.
$key = "12345678";

$cipherText = …
Run Code Online (Sandbox Code Playgroud)

php c++ encryption blowfish nsis

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

如何获得Blowfish加密密钥

我有一堆加密和解密形式的消息使用Blowfish和相同的密钥.有没有办法key摆脱这些消息?

任何算法或工具的参考将受到高度赞赏.我只有密码学的基本知识,所以如果问题太广泛而且不够具体,请纠正我.

encryption cryptography blowfish key

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

PHP Bcrypt哈希

我想使用Blowfish哈希来哈希密码.

crypt() 在5.3之前的PHP版本中不支持它

我的PHP版本是5.2.14.我怎样才能使用Blowfish哈希?我可以使用PEAR Crypt_Blowfish吗?

php hash pear crypt blowfish

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

用于C++的标准blowfish API?

我已经搜索了互联网,但似乎有很多实现,其中一些不能正常工作,是否有一个标准或工作的C++ API我可以用来解密河豚加密字符串?

提前致谢

c++ encryption blowfish

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

为什么要使用blowfish进行密码?

我对密码安全保持有点困惑.假设我有用户帐户表的数据库.这是我保存密码的地方.这时我正在使用盐渍的sha1.

我读基于Blowfish的函数比sha1好,因为它们需要更多时间来处理请求.

是否有任何理由不使用盐渍sha1并将登录尝试次数限制为某个合理的数量(例如每小时50次)作为暴力攻击的"防火墙"?

使用此数据库的人无需强行执行任何操作,因为他可以通过查询更改记录.

passwords hash blowfish

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

C#:Blowfish使用较少的字母

我正在使用Blowfish.NET最新版本,但有一个问题.

responce = new byte[6]
{
     0x00, 0x80 ,0x01, 0x61, 0x00, 0x00
};
byte[] encrypted = new byte[responce.Length];
blowfish.Encrypt(responce, 2, encrypted, 2, input.Length - 2);
Run Code Online (Sandbox Code Playgroud)

我以正确的方式调用它,我希望它从第三个字节开始读/写,长度是6 - 2,因为我不使用两个字节.

问题:

        public int Encrypt(
        byte[] dataIn,
        int posIn,
        byte[] dataOut,
        int posOut,
        int count) 
    {
        uint[] sbox1 = this.sbox1;
        uint[] sbox2 = this.sbox2;
        uint[] sbox3 = this.sbox3;
        uint[] sbox4 = this.sbox4;

        uint[] pbox = this.pbox;

        uint pbox00 = pbox[ 0];
        uint pbox01 = pbox[ 1];
        uint pbox02 = pbox[ 2];
        uint pbox03 …
Run Code Online (Sandbox Code Playgroud)

c# blowfish

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

Blowfish C++没有正确加密/解密..为什么..?

我有这段测试代码使用Blowfish(openssl/blowfish.h)来加密,然后解密一个字符串.但是当它再次出现时,它还没有被正确解密.有谁能告诉我为什么好吗?

(从OP的原始版本复制到http://pastebin.com/AaWSF5pX)

#include <stdlib.h>
#include <cstdio>
#include <string.h>
#include <iostream>
using namespace std;

int main(int argc, char **argv)
{
  // blowfish key
  const char *key = "h&6^5fVghasV_Fte";
  BF_KEY bfKey;
  BF_set_key(&bfKey, strlen(key), (const unsigned char*)key);

  // encrypt
  const unsigned char *inStr = (const unsigned char *)"hello world\0";
  unsigned char *outStr = (unsigned char *)malloc(sizeof(unsigned char) * 100);
  BF_ecb_encrypt(inStr, outStr, &bfKey, BF_ENCRYPT);

  // decrypt
  unsigned char buf[100];
  BF_ecb_encrypt((const unsigned char*)outStr, buf, &bfKey, BF_DECRYPT);
  std::cout << "decrypted: " << buf << …
Run Code Online (Sandbox Code Playgroud)

c++ encryption blowfish

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

Blowfish加密后字符串长度不正确

我用Blowfish编码进行了一些测试并发现了一些东西.编码的字符串并不总是与源字符串一样长.它有时会更短.

如果我想解码编码的字符串,我需要在openssl函数中解码的长度:

BF_cfb64_encrypt(encoded_input,decoded_output,length_to_decode,&key,iv,&num,BF_DECRYPT);    
Run Code Online (Sandbox Code Playgroud)

这里的问题是我没有length_to_decodeif if我不知道源字符串的长度.如果我使用解码后的字符串的长度作为length_to_decode,那么这可能太短了.

如果我使用更大的长度,则解码的字符串不正确.那么我需要知道使用blowfish编码解码的长度吗?

在互联网上的所有示例代码中,编码和解码总是在一个函数中进行,并且解码示例使用硬编码长度进行解码.但在现实生活中,我不知道编码字符串的长度,然后呢?

这是一个例子:

source string:    sdcfgssssssss
source length:    13
encryption key:   s
encrypted output: :‹(
encrypted length: 4
Run Code Online (Sandbox Code Playgroud)

我这样初始化我的钥匙:

BF_KEY key;
const char * keyStr = "s";
BF_set_key(&key, strlen(keyStr), (const unsigned char *)keyStr);
Run Code Online (Sandbox Code Playgroud)

c++ openssl blowfish

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

BLOWFISH:从plainttext和hash恢复密钥?

是否可以从河豚加密的密文和明文对中恢复密钥?

我有几个加密和普通的字符串.但我不记得钥匙.

加密字符串24026B7101030657757D01 解密字符串的示例是AC C1312463

$key = '';
$plaintext = '';
$crypttext = '24026B7101030657757D01';

$cache = array();

while($plaintext != 'AC C1312463')
{
  $key = random_string();
  while(array_search($key,$cache) !== FALSE)
  {
    $key = random_string();
  }
  $cache[] = $key;

  $bf = new Crypt_Blowfish($key);

  $plaintext = $bf->decrypt($crypttext);
 }
    print_r($key);
    die();
Run Code Online (Sandbox Code Playgroud)

假设我有这样的算法.函数random_string应该如何获得32位随机密钥?

cryptography blowfish

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

PHP加密/解密添加填充字符

我正在尝试创建一个简单的加密类,但结果字符串用非ascii字符填充.我已经尝试过rtrim(),转换为utf8等,如其他一些答案所述.我到底错过了什么?以下是将结果粘贴到Notepad ++中时出现的字符

在此输入图像描述

包含此处字符的Pastebin .在html中显示为't',但将其复制到记事本中会显示其后的数据的随机位.

class Crypter implements ICrypter {

private $Key;
private $Algo;

public function __construct($Algo = MCRYPT_BLOWFISH) {

    $this->Key = substr('key', 0, mcrypt_get_key_size($Algo, MCRYPT_MODE_ECB));
    $this->Algo = $Algo;

}

public function Encrypt($data) {

    //$iv_size = mcrypt_get_iv_size($this->Algo, MCRYPT_MODE_ECB);
    //$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

    $blocksize = mcrypt_get_block_size('blowfish', 'ecb'); // get block size
    $pkcs = $blocksize - (strlen($data) % $blocksize); // get pkcs5 pad length
    $data.= str_repeat(chr($pkcs), $pkcs); // append pkcs5 padding to the data


    $crypt = mcrypt_encrypt($this->Algo, $this->Key, $data, MCRYPT_MODE_ECB);
    return …
Run Code Online (Sandbox Code Playgroud)

php encryption blowfish character-encoding password-encryption

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

PHP.net是否是"任何"PHP引用的可靠资源?

修改我的"问题",以免惹恼当地人.

现在互联网上似乎有这么多资源(包括SO),找到问题的"答案"可能很容易,但如何判断答案是否有效甚至是最新的?

特别是一个领域和一个被问到很多的领域是如何使用PHP正确处理散列和加密,以便在数据库存储中做好准备.关于SO的一个常见答案似乎总是"你有没有访问过php.net?".虽然我理解这通常会出现一个问题,其中有人问最简单的问题,但我已经开始发现一些描述似乎有冲突,更重要的是,用户示例已经过时(很多来自2008-2009).

例如:在寻找为什么以及如何使用密码哈希时:http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

总之,我了解到sha1和md5是快速且计算效率高的哈希方法,它们不再适用于密码哈希.建议的方法是使用crypt()函数.

在了解有关crypt()以及特别是河豚哈希的更多信息时,页面上列出的规则如下:

http://www.php.net/manual/en/function.crypt.php

  • 以$ 2a $开始我的盐
  • 继续使用两个数值(下面的用户已经说明了这个的重要性,而php.net没有)
  • 跟着$
  • 输入22个字母数字字符

进一步阅读给出了一个例子:

<?php

    if (CRYPT_BLOWFISH == 1) {
        echo 'Blowfish:     ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";

    }
?>
Run Code Online (Sandbox Code Playgroud)

似乎同一页面上的示例不遵循它刚刚告诉我们使用的规则("$ 2a $ 07 $"之后的26个字符.

回报是:

河豚:
$ 2a $ 07 $ usesomesillystringfore2uDLvp1Ii2e ./ U9C8sBjqp8I90dH6hi

实际上,字符串本身确实会被改变,但几乎我的整个SALT值(上面提到的前22个字符)都是敞开的.难道这不会让我更简单地确定我的实际字符串是什么吗?

更重要的是,这只是一个例子,但最终,依赖PHP.net等资源应该有多大?

正如我的朋友Mugatu曾经说过"我觉得我正在服用疯狂的药片".

注意:上面提到的页面是自我原始发布以来编辑的,所以我无法保证自从我的原始问题和示例提供后事情没有改变.

php encryption md5 crypt blowfish

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