小编Dan*_*ger的帖子

OpenSSL使用EVP与算法API进行对称加密

嗨,我已经在我的linux机器上安装了openssl并通过头文件和文档(这是非常不充分的:().

我正在尝试构建一个使用对称加密算法的项目(在'c'中)(我专注于aes256cbc).问题是我很困惑如何在我的代码中使用库函数.

对于我实现的aes256cbc,我可以直接使用'aes.h'头文件中定义的函数(首先在我看来).

但在google搜索中我遇到了一些使用'evp.h'函数的教程来做这个http://saju.net.in/code/misc/openssl_aes.c.txt

是否有特定原因或直接访问aes.h函数更好.

而且,如果有人能够指出我使用openssl的加密库的任何类型的良好文档/教程将非常感激.

非常感谢

如果我天真,PS原谅我

c linux openssl cryptography

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

GCC选项的-shared和-Wl,-shared之间的区别

我知道-Wl,-sharedld的一个选项.我见过有人像这样编译,

$ gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o
Run Code Online (Sandbox Code Playgroud)

有些人喜欢这样

$ gcc -Wl,-shared -Wl,-soname,libtest.so -o libtest.so *.o
Run Code Online (Sandbox Code Playgroud)

所以,我想知道-shared和之间是否存在一些差异-Wl,-shared.

谢谢.

unix linux linker gcc shared-libraries

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

如何使用密钥大小和明文长度计算RSA密文的大小?

我有一些明确的文本,我想用RSA_PKCS_V21加密(使用PolarSSL库).问题是我需要在执行算法之前知道密文的大小(用于动态内存分配目的).我知道RSA密钥大小和明文长度.
我也想知道输入明文长度的限制.
任何的想法?

encryption cryptography rsa polarssl

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

为Lua包装C库:如何创建嵌套的函数表?

与此问题相关的代码如下:https://github.com/jchester/lua-polarssl/tree/master/src

目前我正在尝试包装PolarSSL库的一部分(http://polarssl.org),以便我访问SHA-512 HMAC(luacrypto不提供此功能).

我的目标API是以下形式:

a_sha512_hash = polarssl.hash.sha512('text')
Run Code Online (Sandbox Code Playgroud)

或更全面

local polarssl = require 'polarssl'
local hash = polarssl.hash

a_sha512_hash = hash.sha512('test')
Run Code Online (Sandbox Code Playgroud)

如果你在上面的链接中引用polarssl.c,你会看到我编写了包装PolarSSL代码的函数.然后我正在尝试构建函数表:

LUA_API int luaopen_polarssl( lua_State *L ) {
  static const struct luaL_Reg core[] = {
    { NULL, NULL }
  };

  static const struct luaL_Reg hash_functions[] = {
    { "sha512", hash_sha512 },
    { "sha384", hash_sha384 },
    { NULL, NULL }
  };

  static const struct luaL_Reg hmac_functions[] = {
    { "sha512", hmac_sha512 },
    { "sha384", hmac_sha384 },
    { NULL, …
Run Code Online (Sandbox Code Playgroud)

c lua nested-table polarssl

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

内核模式下的线程本地存储?

Windows中的内核模式驱动程序是否存在线程局部存储(TLS)等效(确切地说是Win32)?

我试图实现的目标:

最终,在我的驱动程序的调度程序中,它可能会调用许多其他函数(可能存在深度调用).我想提供一些特定于正在处理的请求的上下文信息.也就是说,我有一些结构,指针应该在所有被调用的函数中都可见,而不是将它作为参数显式传递给每个函数.

使用static/global不是一个完美的选择(多线程,同步对象等).

如果那是用户模式代码 - 在这种情况下显然会使用TLS.但是AFAIK没有像TlsGetValue/ 这样的内核模式功能TlsSetValue.这是有道理的 - 要使这些功能工作,必须首先分配一个进程范围的TLS索引.OTOH驱动程序代码可以在任意线程上调用,不限于特定进程.

但是,我实际上并不需要持久的特定于线程的存储.我只需要一个特定于线程的存储来进行顶级函数调用.

我想我知道如何以一种黑客的方式"实施"TLS.我将始终使用预定义的索引(例如,index = 0),而不是分配TLS索引.在顶级函数中,我将保存存储的TLS值,并用所需的值覆盖它.完成后,将恢复保存的值.

幸运的是我知道如何在Win32中实现TLS.TIB每个线程都有一个结构(线程信息块).在每个线程中,可以使用FS:[18h]选择器访问它.在TIB包含(除其他外)通过TLS使用的阵列.其余的非常简单.

但是,我更愿意使用官方API来实现类似的功能.

  • 是否有官方的内核模式API来实现我的需求?
  • 有理由避免我打算做的事吗?我知道重新进入可能存在问题(即一些代码调用我,我覆盖TLS值,然后最终调用原始代码,这可能依赖于TLS).但在我的具体情况下,这是不可能的?
  • 有没有那么脏的方法来解决这个问题?

提前致谢.

PS One理论上可以使用SEH(也存储每线程信息).也就是说,包装顶级代码__try/__except,然后在需要上下文信息的地方 - 用一些参数引发可持续异常,在__except块中用上下文信息填充参数,然后恢复执行.这是一个100%有效的程序流程,不使用未记录的功能.但对我来说这似乎是一个丑陋的黑客,更不用说性能并发症了.

windows winapi kernel thread-local-storage

9
推荐指数
2
解决办法
2719
查看次数

将来自RabbitMQ的消息转换为string/json

我目前正在努力解决一个公平的问题.我想从RabbitMQ收到一条消息,并将其转换为字符串(或稍后的json对象).但我得到的只是字节数.

消息对象显示本身作为一个字符串,方式

(Body:'{"cityId":644}'; ID:null; Content:application/json; Headers:{}; Exchange:; RoutingKey:pages.type.index; Reply:null; DeliveryMode:NON_PERSISTENT; DeliveryTag:1)
Run Code Online (Sandbox Code Playgroud)

配置类(使用弹簧)

@Configuration
public class RabbitConfiguration {

    @Bean
    public CachingConnectionFactory connectionFactory() {
        CachingConnectionFactory connectionFactory = new CachingConnectionFactory("www.example.com");
        connectionFactory.setUsername("xxxx");
        connectionFactory.setPassword("xxxx");
        return connectionFactory;
    }

    @Bean
    public MessageConverter jsonMessageConverter(){
        JsonMessageConverter jsonMessageConverter = new JsonMessageConverter();
        return jsonMessageConverter;
    }

    @Bean
    public SimpleMessageListenerContainer messageListenerContainer(){
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory());
        container.setAutoStartup(false);
        container.setQueues(indexQueue());
        container.setConcurrentConsumers(1);
        container.setAcknowledgeMode(AcknowledgeMode.AUTO);
        container.setMessageListener(new MessageListenerAdapter(pageListener(), jsonMessageConverter()));
        return container;
    }

    @Bean
    public Queue indexQueue(){
        return new Queue("pages.type.index");
    }

    @Bean
    public MessageListener pageListener(){
        return new PageQueueListener(); …
Run Code Online (Sandbox Code Playgroud)

java spring json amqp rabbitmq

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

Spring AMQP/RabbitMQ和Hibernate Transaction Mananger

我有一个使用Hibernate和PostgreSQL的Spring应用程序.它还使用Spring AMQP(RabbitMQ).

我使用Hibernate事务管理器配置如下:

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager"
    p:sessionFactory-ref="sessionFactory" p:dataSource-ref="dataSource" />
Run Code Online (Sandbox Code Playgroud)

我正在使用SimpleMessageListenerContainer进行异步消息接收,配置如下:

@Resource(name="transactionManager")
private PlatformTransactionManager txManager;

@Autowired
private MyListener messageListener;

@Bean
public SimpleMessageListenerContainer mySMLC()
{
    final SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
    container.setConnectionFactory(rabbitConnectionFactory);
    container.setQueueNames("myQueue");

    final MessageListenerAdapter adapter = new MessageListenerAdapter(messageListener);
    adapter.setMessageConverter(converter);
    container.setMessageListener(adapter);
    container.setChannelTransacted(true);
    container.setTransactionManager(txManager);
    return container;
}
Run Code Online (Sandbox Code Playgroud)

所以基本上我已经指定消息的接收需要是事务性的.消息侦听器调用一个服务,该服务可以使用@Transactional注释方法,并可能在数据库上执行CRUD操作.

我的问题是,使用HibernateTransactionManager来管理SimpleMessageListenerContainer级别的事务是否存在问题?使用数据库事务管理器包装从RabbitMQ接收消息会有任何问题吗?

我不期待XA在这里.我只想确保如果服务对数据库的任何操作失败,则消息不会被送到RabbitMQ代理.

rabbitmq spring-transactions spring-orm spring-amqp

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

如何在MacOS X下使用GCC中的内联汇编程序调用write syscall?

write系统调用具有以下功能样机:

size_t write(int, const void *buf, size_t nbytes);
Run Code Online (Sandbox Code Playgroud)

如何write在MacOS X下使用GCC中的内联汇编程序调用系统调用?

c assembly gcc system-calls inline-assembly

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

如何解决`FATAL:无法写入锁定文件“ postmaster.pid”:设备上没有剩余空间错误?

我在fedora core 14中安装了postgres 8.4.9数据库,并部署了一个应用程序。直到今天,它都运行良好,然后才尝试重新启动系统。现在,我无法启动pgsql。当我尝试启动时,出现以下错误

严重:无法写入锁定文件“ postmaster.pid”:设备上没有剩余空间

我用谷歌搜索,但找不到该问题的解决方案。

有人可以帮忙解决这个问题吗?

这是df -kh命令的输出:

Filesystem            Size  Used Avail Use% Mounted on
/dev/vda              9.9G  9.5G     0 100% /
tmpfs                 2.0G   88K  2.0G   1% /dev/shm
Run Code Online (Sandbox Code Playgroud)

unix linux postgresql diskspace fedora16

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

将 size_t 转换成 long,有什么缺点吗?

将 size_t 转换为 long 有什么缺点吗?因为,我正在编写一个在文件中维护 links_list 的程序。因此,我基于 size_t 遍历到另一个节点,并且还将列表总数记录为 size_t。因此,显然会有一些转换或添加 long 和 size_t。这有什么缺点吗?如果有的话,我会把所有东西都做的一样长,而不是 size_t,甚至是尺寸。请指教。

c++ sizeof size-t type-conversion long-integer

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