我从https://www.gnupg.org/download/index.html下载了最新的libgcrypt和libgpg错误库.我已经使用./configure --enable-static --disable-shared成功构建了(命令行)两个库.制作 在我的Mac上安装make(Mavericks w/OSX 10.10和最新的Xcode 6.1).
我可以从我正在构建的OS X客户端应用程序链接到这些新库.到现在为止还挺好.刚刚好.但是,我还需要使用相同的源代码构建iOS客户端.
问题:
1)我需要为库(模拟器,Mac和iOS)构建通用静态库,对库的命令行构建序列有哪些修改?2)或者我是否需要为iOS构建单独的静态库?如果是这样,那么,我需要用什么命令行魔法来完成目标架构?
我正在使用 libgcrypt(Gentoo x64 上的 v1.6.1)并且我已经实现(并通过 AEs 测试向量进行了测试)aes256-cbc 和 aes256-ctr。现在我正在查看 aes256-gcm,但我对工作流程有一些疑问。下面是一个简单加密程序的骨架:
int main(void){
unsigned char TEST_KEY[] = {0x60,0x3d,0xeb,0x10,0x15,0xca,0x71,0xbe,0x2b,0x73,0xae,0xf0,0x85,0x7d,0x77,0x81,0x1f,0x35,0x2c,0x07,0x3b,0x61,0x08,0xd7,0x2d,0x98,0x10,0xa3,0x09,0x14,0xdf,0xf4};
unsigned char TEST_IV[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
unsigned char TEST_PLAINTEXT_1[] = {0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a};
unsigned char cipher[16] = {0};
int algo = -1, i;
const char *name = "aes256";
algo = gcry_cipher_map_name(name);
gcry_cipher_hd_t hd;
gcry_cipher_open(&hd, algo, GCRY_CIPHER_MODE_GCM, 0);
gcry_cipher_setkey(hd, TEST_KEY, 32);
gcry_cipher_setiv(hd, TEST_IV, 16);
gcry_cipher_encrypt(hd, cipher, 16, TEST_PLAINTEXT_1, 16);
char out[33];
for(i=0;i<16;i++){
sprintf(out+(i*2), "%02x", cipher[i]);
}
out[32] = '\0';
printf("%s\n", out);
gcry_cipher_close(hd);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在 GCM …
我有两台CentOS 6.7机器(服务器A和B).每个系统上都安装了相同的软件包版本.
上周我在服务器A上启用了openSSH FIPS 140-2模块,该系统完美运行(包括对SQL Server实例的tsql查询).
今天我在服务器B上执行了相同的步骤(在上面的链接中).重新启动后,fips显示已启用并已测试正常 - 但tsql
(对于同一SQL Server实例)已停止使用以下错误:
[serverB ~]# tsql -S egServer80 -U myusername
Password:
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
Run Code Online (Sandbox Code Playgroud)
我查看日志文件并找到:
tsql: Libgcrypt warning: MD5 used - FIPS mode inactivated
Run Code Online (Sandbox Code Playgroud)
在freetds中启用调试会产生以下额外错误:
14:56:46.617196 3577 (net.c:1366):'''handshake failed: GnuTLS internal error.
Run Code Online (Sandbox Code Playgroud)
退出FIPS模块(从grub.conf中删除fips = 1)并重新启动设置回来,我又能够tsql
进入我的SQL Server实例.
两个CentOS机器都使用相同的libgcrypt版本(1.4.5).
为什么(或如何)在grub中启用FIPS导致libgcrypt
在这台机器上失败? 显然,机器之间的某些配置是关闭的,但我无法发现它,并且已经耗尽了资源以找到下一步的位置.
注意#1:
我可以 …
我使用libgcrypt的CTR模式实现使用AES-256加密文件.我希望能够部分解密文件(例如,解密20个块中的5-10个块而不解密整个文件).
我知道通过使用CTR模式,我应该能够做到这一点.我所需要的只是知道正确的计数器.问题在于我所拥有的只是块0的初始计数器.例如,如果我想解密块5,我需要另一个计数器,通过对每个块的初始计数器执行一些操作来实现到5.
我似乎无法找到libgcrypt公开的API,以便为给定初始计数器的后续块计算计数器.
在给定块#0的计数器的情况下,如何计算后续块的计数器(例如块#5)?
我正在C中进行远程备份项目...我想发送数据和压缩以及加密数据.
但是我很困惑是先压缩还是先加密!
什么会更好?:
此外,我将使用zlib进行压缩.我想知道使用哪种加密库...有人说libgcrypt很好.建议好的加密库(非常容易使用)将不胜感激... :)
或者有什么可以完成这两项工作吗?
谢谢!
libgcrypt ×5
aes-gcm ×1
autoconf ×1
block-cipher ×1
c ×1
centos ×1
compression ×1
cryptography ×1
ctr-mode ×1
encryption ×1
fips ×1
freetds ×1
ios ×1