是否有可能并且值得尝试使用Android NDK开发一些服务器应用程序,它将加密从普通的基于Java的应用程序传递给它的数据(或者只是使用一些内置的Linux加密库)?
我尝试使用Cipher库,但用AES加密2MB文件花了差不多一分钟.在Android 2.3(?)之前,在Cipher中不能使用blowfish.我怀疑它会快得多.
我在Symbian上使用blowfish进行加密,速度要快得多(5-10秒),所以我认为在android中它因为使用Java虚拟机而变慢,我想尝试本机应用程序.
有人以前做过吗?
编辑:NDK中的加密速度要快得多.在那里做.AES的答案也有类似的问题:Android上的AES解密太慢而无法使用.NDK会更快吗?其他想法?
为什么Crypt :: CBC(perl)和OpenSSL(ruby)之间的blowfish加密存在差异?
Perl的
use Crypt::CBC;
my $cipher = Crypt::CBC->new( -key => 'length32length32length32length32', -cipher => 'Blowfish' );
my $ciphertext = $cipher->encrypt_hex('test');
# ciphertext is 53616c7465645f5f409c8b8eb353823c06d9b50537c92e19
Run Code Online (Sandbox Code Playgroud)
红宝石
require "rubygems"
require "openssl"
cipher = OpenSSL::Cipher::Cipher.new("bf-cbc")
cipher.encrypt
cipher.key = "length32length32length32length32"
result = cipher.update("test") << cipher.final
ciphertext = result.unpack("H*").first
# ciphertext is 16f99115a09e0464
Run Code Online (Sandbox Code Playgroud)
Crypt :: CBC Salted__默认情况下似乎在输出前面.你能解释一下这些之间发生了什么不同吗?有没有办法让OpenSSL以类似于Crypt :: CBC的方式运行?
根据crypt(3)手册,Blowfish(由$ 2a $前缀表示)是受支持的密码方法之一:
ID | Method
?????????????????????????????????????????????????????????
1 | MD5
2a | Blowfish (not in mainline glibc; added in some
| Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
Run Code Online (Sandbox Code Playgroud)
然而,部分说Blowfish(不在主线glibc;在一些Linux发行版中添加)是令人困惑和未记录的,所以我有几个问题.
首先,如果"主线"glibc不支持Blowfish,那么哪个glibc呢?Ubuntu 14.04使用glibc 2.19,打包在libc6/libc6-dev软件包中.假设这是"主线"glibc,则不支持Blowfish.显然有一个叫做crypt_blowfish的补丁,为glibc增加了Blowfish支持.为什么Ubuntu默认没有启用它?最后但并非最不重要的是,在Ubuntu中使C crypt()函数了解Blowfish哈希的最简单方法是什么?
在Ubuntu 16.04 LTS上升级到php7.2后,phpMyAdmin在查看表时显示恼人的弹出警告:
"在服务器上检测到一些错误!请查看此窗口的底部.忽略全部.忽略."
在窗口的底部:
" ./libraries/sql.lib.php#601中的警告
count():参数必须是数组或实现Countable的对象"
...后面是一个很长的回溯列表.
在包括和低于4.5.4的各种phpMyAdmin 4.x版本上会出现此问题.
我该如何解决?
升级到最新版本的phpMyAdmin(4.7.9)后,我现在收到一个新错误,显示在每个页面的底部:
"配置文件现在需要一个秘密密码(blowfish_secret)."
我该如何解决?
从 OpenSSL 3.0 开始,以下命令(适用于 OpenSSL 1.1)
openssl bf-cbc -d -nopad -bufsize 2048 -K 000102030405060708090A0B0C0D0E0F -iv 0001020304050607 < enc
Run Code Online (Sandbox Code Playgroud)
现在失败了
设置密码 BF-CBC 40CCA0B4217F0000 时出错:错误:0308010C:数字信封例程:inner_evp_generic_fetch:不支持:crypto/evp/evp_fetch.c:349:全局默认库上下文,算法(BF-CBC:13),属性()
看看evp_fetch.c:349我想我有一个 NULL 方法
但-help屏幕不提供任何与指定方法相关的内容
Usage: bf-cbc [options]
General options:
-help Display this summary
-list List ciphers
-ciphers Alias for -list
-e Encrypt
-d Decrypt
-p Print the iv/key
-P Print the iv/key and exit
-engine val Use engine, possibly a hardware device
Input options:
-in infile Input file
-k val Passphrase
-kfile infile …Run Code Online (Sandbox Code Playgroud) 我正在创建一个类似于phpmyadmin(数据库管理UI)的应用程序.用户需要针对数据库进行身份验证,并且应用程序需要以某种方式存储凭据.SSL不是所有安装的选项.
想法1:如果违反服务器安全性则出现问题.(关键是配置,/ tmp中的会话数据)
想法2:中间人攻击的问题.(密钥+凭证已发送)
还有其他建议吗?批评?
编辑:好的,所以我有点在这里找到答案BCrypt说长,类似的密码是等价的 - 问题与我,宝石,或密码学领域?
但是,如果你不得不在我们试图教育用户选择越来越复杂的密码,甚至密码,密码必须短于n个字符的世界中限制用户的密码长度,有人可以推荐使用bCrypt进行散列的新问题似乎是一种方式,最终在thedailywtf.com星期五的截图:)
原始问题如下:
我正在为一个应用程序重构一个旧的登录页面,并决定使用JAVA实现jBCrypt(http://www.mindrot.org/projects/jBCrypt/)给bCrypt一个旋转,并遇到一个主要的显示阻止.
问题在于checkpw方法,当使用非常长的种子时,它总是似乎返回true.我打算使用{InternalSalt} {username} {password}来填写用户的密码,然后使用bCrypt对其进行哈希处理.
所以我有以下代码(尽可能地将其剥离以隔离checkpw).
public class Test {
public static void main(String[] args) {
String plaintext = "jw~ct/f61y1m7q458GiLVQpiqDK|8kG=d368Id:D@$^_80I{qrn1HM6423{FtestAccountO1nu3jKN";
String pw_hash = BCrypt.hashpw(plaintext, BCrypt.gensalt());
if (BCrypt.checkpw("jw~ct/f61y1m7q458GiLVQpiqDK|8kG=d368Id:D@$^_80I{qrn1HM6423{FtestAccountO1nu3jKN", pw_hash))
System.out.println("It matches");
else
System.out.println("It does not match");
}
Run Code Online (Sandbox Code Playgroud)
}
这将是应该打印"匹配".
我有问题是说你说的添加AAA到密码传递给checkpw使它
BCrypt.checkpw("jw~ct/f61y1m7q458GiLVQpiqDK | 8kG = d368Id:D @ $ ^ _ 80I {qrn1HM6423 {FtestAccountO1nu3jKNaaa",pw_hash)
它仍然是真的!不完全是我所期待的.我没有在doc中看到任何密码长度限制但是我无法用较小的密码种子重现它,看起来如果我修改除了字符串结尾之外的其他任何东西,它按预期返回false.
我错过了什么专业吗?我知道我不应该是唯一一个在这些论坛上使用jBcrypt的人,因为我看过BCrypt在做一些研究时在很多帖子中推荐的.
编辑:Windows 7 64位 - Java(TM)SE运行时环境(版本1.6.0_24-b07)
我正在运行一个带有密码哈希的网站,但我认为当前的算法是不够的.我尝试使用PHP的crypt()和blowfish选项,但我的PHP版本只有5.2,因此没有启用CRYPT_BLOWFISH.
我见过可以通过Blowfish进行加密的第三方库,但没有一个可以完成Bcrypt的完整散列.你知道有没有使用crypt()函数进行bcrypt散列的PHP库吗?或者,更好的是,任何将第三方blowfish加密算法提供给第三方bcrypt哈希算法的方法?
只是为了澄清,我无法安装更新版本的PHP,因为我在共享主机上.
我真的很感激任何建议!谢谢!
有一个用PHP编写的应用程序,我将其转换为Ruby.加密密码时,PHP应用程序使用以下代码:
if($method == 2 && CRYPT_BLOWFISH) return crypt($pass, '$2a$07$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxx$');
Run Code Online (Sandbox Code Playgroud)
我假设这是使用Blowfish实现.这里的x都是a-zA-Z0-9字符.
Ruby中的Blowfish实现使用以下语法(取自http://crypt.rubyforge.org/blowfish.html):
blowfish = Crypt::Blowfish.new("A key up to 56 bytes long")
plainBlock = "ABCD1234"
encryptedBlock = blowfish.encrypt_block(plainBlock)
Run Code Online (Sandbox Code Playgroud)
我没有56或更少的字节长字符串,并且不清楚PHP版本应该是什么.那么如何编写一个Ruby函数来加密密码以获得与PHP相同的结果呢?
我正在编写一个需要加密密码的注册表,我听说建议我使用Blowfish加密密码,如何使用PHP crypt()函数实现blowfish加密?另外,我打算稍后检索密码以便登录.
blowfish ×10
encryption ×5
php ×4
openssl ×2
passwords ×2
ruby ×2
security ×2
android ×1
android-ndk ×1
bcrypt ×1
count ×1
crypt ×1
glibc ×1
hash ×1
perl ×1
php-7.2 ×1
phpmyadmin ×1
salt ×1
session ×1
ubuntu-16.04 ×1